<?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>171411</bug_id>
          
          <creation_ts>2017-04-27 18:19:37 -0700</creation_ts>
          <short_desc>Speedometer: Add an Inferno TodoMVC implementation</short_desc>
          <delta_ts>2017-05-11 20:00:03 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>170513</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Addy Osmani">addyo</reporter>
          <assigned_to name="Addy Osmani">addyo</assigned_to>
          <cc>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>lforschler</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1302431</commentid>
    <comment_count>0</comment_count>
    <who name="Addy Osmani">addyo</who>
    <bug_when>2017-04-27 18:19:37 -0700</bug_when>
    <thetext>As part of Speedometer 2.0 (https://bugs.webkit.org/show_bug.cgi?id=170513), introduce an Inferno (https://infernojs.org/) implementation of TodoMVC. Similar to Preact, it is another performance-focused alternative to React with a similar API that offers a similar feature set at a smaller size.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1302438</commentid>
    <comment_count>1</comment_count>
      <attachid>308489</attachid>
    <who name="Addy Osmani">addyo</who>
    <bug_when>2017-04-27 18:35:26 -0700</bug_when>
    <thetext>Created attachment 308489
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1306271</commentid>
    <comment_count>2</comment_count>
      <attachid>308489</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-05-08 22:55:06 -0700</bug_when>
    <thetext>Comment on attachment 308489
Patch

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

I guess Inferno example doesn&apos;t try to restore anything to localStorage in the first place?

&gt; PerformanceTests/ChangeLog:7
&gt; +        Adds a Inferno implem of TodoMVC to Speedometer

Please add a blank line between &quot;Reviewed by&quot; and this line.

&gt; PerformanceTests/ChangeLog:10


Please these per-function comments. Since you&apos;re not adding any comments, they&apos;re only cluttering the change log.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307661</commentid>
    <comment_count>3</comment_count>
      <attachid>309842</attachid>
    <who name="Addy Osmani">addyo</who>
    <bug_when>2017-05-11 18:35:55 -0700</bug_when>
    <thetext>Created attachment 309842
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307662</commentid>
    <comment_count>4</comment_count>
    <who name="Addy Osmani">addyo</who>
    <bug_when>2017-05-11 18:36:25 -0700</bug_when>
    <thetext>Added a blank line and removed per function comments as requested. PTAL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307685</commentid>
    <comment_count>5</comment_count>
      <attachid>309842</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-05-11 19:36:47 -0700</bug_when>
    <thetext>Comment on attachment 309842
Patch

Rejecting attachment 309842 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.webkit.org&apos;, &apos;--bot-id=webkit-cq-01&apos;, &apos;land-attachment&apos;, &apos;--force-clean&apos;, &apos;--non-interactive&apos;, &apos;--parent-command=commit-queue&apos;, 309842, &apos;--port=mac&apos;]&quot; exit_code: 2 cwd: /Volumes/Data/EWS/WebKit

Last 500 characters of output:
a48a49823dfb07f4bf990e6356130677633
r216709 = 762031772c38451f69aa1fd7308f0e4ba8a2af21
r216710 = 2d96e9eb3105de5c55e9a3b37102a61b56e717e5
r216711 = e6f5012ae5d3cb699a776fedc2b51eb16f8aa4ec
r216712 = bcabe4ed74dbf7146ae1868f3165ab34cd5764fa
r216713 = 0f39ca8af1438b885163d4e799cd96825430c98e
Done rebuilding .git/svn/refs/remotes/origin/master/.rev_map.268f45cc-cd09-0410-ab3c-d52691b4dbfc
First, rewinding head to replay your work on top of it...
Fast-forwarded master to refs/remotes/origin/master.

Full output: http://webkit-queues.webkit.org/results/3722898</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307718</commentid>
    <comment_count>6</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-05-11 20:00:03 -0700</bug_when>
    <thetext>Committed r216723: &lt;http://trac.webkit.org/changeset/216723&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>308489</attachid>
            <date>2017-04-27 18:35:26 -0700</date>
            <delta_ts>2017-05-11 18:35:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171411-20170427183525.patch</filename>
            <type>text/plain</type>
            <size>174244</size>
            <attacher name="Addy Osmani">addyo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1ODMwCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCmluZGV4IGI5ZTE0YmUyOGRh
MmFmOTBlNjBmNGI5MTQ4OGI0NzE1ODQ0OGE2Y2IuLjNmOTUwYTY0YTBjMDg0ZmM4YjRhNDkxOTc2
ZmExODAyMDkyNzQyMjQgMTAwNjQ0Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCisr
KyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjk2IEBACisyMDE3LTA0
LTI3ICBBZGR5IE9zbWFuaSAgPGFkZHlvc21hbmlAZ21haWwuY29tPgorCisgICAgICAgIFNwZWVk
b21ldGVyOiBBZGQgYW4gSW5mZXJubyBUb2RvTVZDIGltcGxlbWVudGF0aW9uCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzE0MTEKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgQWRkcyBhIEluZmVybm8gaW1wbGVt
IG9mIFRvZG9NVkMgdG8gU3BlZWRvbWV0ZXIKKworICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291
cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9pbmZlcm5vL2Rpc3QvYnVuZGxlLmpz
OiBBZGRlZC4KKyAgICAgICAgKF9pbnRlcm9wUmVxdWlyZURlZmF1bHQpOgorICAgICAgICAoX2Ns
YXNzQ2FsbENoZWNrKToKKyAgICAgICAgKF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKToKKyAg
ICAgICAgKF9pbmhlcml0cyk6CisgICAgICAgIChBcHApOgorICAgICAgICAoQXBwLik6CisgICAg
ICAgIChBcHAucHJvdG90eXBlLnJlbmRlcik6CisgICAgICAgIChpc1N0YXRlZnVsQ29tcG9uZW50
KToKKyAgICAgICAgKGlzU3RyaW5nT3JOdW1iZXIpOgorICAgICAgICAoaXNOdWxsT3JVbmRlZik6
CisgICAgICAgIChpc0ludmFsaWQpOgorICAgICAgICAoaXNGdW5jdGlvbik6CisgICAgICAgIChp
c0F0dHJBbkV2ZW50KToKKyAgICAgICAgKGlzU3RyaW5nKToKKyAgICAgICAgKGlzTnVtYmVyKToK
KyAgICAgICAgKGlzTnVsbCk6CisgICAgICAgIChpc1RydWUpOgorICAgICAgICAoaXNVbmRlZmlu
ZWQpOgorICAgICAgICAoaXNPYmplY3QpOgorICAgICAgICAodGhyb3dFcnJvcik6CisgICAgICAg
ICh3YXJuaW5nKToKKyAgICAgICAgKF9ub3JtYWxpemVWTm9kZXMpOgorICAgICAgICAobm9ybWFs
aXplVk5vZGVzKToKKyAgICAgICAgKG5vcm1hbGl6ZUNoaWxkcmVuKToKKyAgICAgICAgKG5vcm1h
bGl6ZVByb3BzKToKKyAgICAgICAgKG5vcm1hbGl6ZSk6CisgICAgICAgIChjcmVhdGVWTm9kZSk6
CisgICAgICAgIChjcmVhdGVWb2lkVk5vZGUpOgorICAgICAgICAoY3JlYXRlVGV4dFZOb2RlKToK
KyAgICAgICAgKGlzVk5vZGUpOgorICAgICAgICAoZ2V0SW5jcmVtZW50YWxJZCk6CisgICAgICAg
IChzZW5kVG9EZXZUb29scyk6CisgICAgICAgIChyZXJlbmRlclJvb3RzKToKKyAgICAgICAgKGlu
aXREZXZUb29sc0hvb2tzKToKKyAgICAgICAgKExpZmVjeWNsZSk6CisgICAgICAgIChMaWZlY3lj
bGUucHJvdG90eXBlLmFkZExpc3RlbmVyKToKKyAgICAgICAgKExpZmVjeWNsZS5wcm90b3R5cGUu
dHJpZ2dlcik6CisgICAgICAgIChjb25zdHJ1Y3REZWZhdWx0cyk6CisgICAgICAgIChoYW5kbGVF
dmVudCk6CisgICAgICAgIChkaXNwYXRjaEV2ZW50KToKKyAgICAgICAgKG5vcm1hbGl6ZUV2ZW50
TmFtZSk6CisgICAgICAgIChnZXQgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKToKKyAgICAgICAgKGdl
dCBldmVudCk6CisgICAgICAgIChkb2NFdmVudCk6CisgICAgICAgIChhdHRhY2hFdmVudFRvRG9j
dW1lbnQpOgorICAgICAgICAoaXNDaGVja2VkVHlwZSk6CisgICAgICAgIChpc0NvbnRyb2xsZWQp
OgorICAgICAgICAob25UZXh0SW5wdXRDaGFuZ2UpOgorICAgICAgICAob25DaGVja2JveENoYW5n
ZSk6CisgICAgICAgIChoYW5kbGVBc3NvY2lhdGVkUmFkaW9JbnB1dHMpOgorICAgICAgICAoYXBw
bHlWYWx1ZSk6CisgICAgICAgICh1cGRhdGVDaGlsZE9wdGlvbik6CisgICAgICAgIChvblNlbGVj
dENoYW5nZSk6CisgICAgICAgIChwcm9jZXNzU2VsZWN0KToKKyAgICAgICAgKG9uVGV4dGFyZWFJ
bnB1dENoYW5nZSk6CisgICAgICAgIChwcm9jZXNzVGV4dGFyZWEpOgorICAgICAgICAocHJvY2Vz
c0VsZW1lbnQpOgorICAgICAgICAodW5tb3VudCk6CisgICAgICAgICh1bm1vdW50Vm9pZE9yVGV4
dCk6CisgICAgICAgICh1bm1vdW50Q29tcG9uZW50KToKKyAgICAgICAgKHVubW91bnRFbGVtZW50
KToKKyAgICAgICAgKHVubW91bnRDaGlsZHJlbik6CisgICAgICAgICh1bm1vdW50UmVmKToKKyAg
ICAgICAgKHBhdGNoKToKKyAgICAgICAgKHBhdGNoRWxlbWVudCk6CisgICAgICAgIChwYXRjaENo
aWxkcmVuKToKKyAgICAgICAgKHBhdGNoQ29tcG9uZW50KToKKyAgICAgICAgKHBhdGNoVGV4dCk6
CisgICAgICAgIChwYXRjaFZvaWQpOgorICAgICAgICAocGF0Y2hOb25LZXllZENoaWxkcmVuKToK
KyAgICAgICAgKHBhdGNoS2V5ZWRDaGlsZHJlbik6CisgICAgICAgIChsaXNfYWxnb3JpdGhtKToK
KyAgICAgICAgKHBhdGNoUHJvcCk6CisgICAgICAgIChwYXRjaEV2ZW50cyk6CisgICAgICAgIChw
YXRjaEV2ZW50KToKKyAgICAgICAgKHBhdGNoUHJvcHMpOgorICAgICAgICAocGF0Y2hTdHlsZSk6
CisgICAgICAgIChyZW1vdmVQcm9wKToKKyAgICAgICAgKGRpc2FibGVSZWN5Y2xpbmcpOgorICAg
ICAgICAocmVjeWNsZUVsZW1lbnQpOgorICAgICAgICAocG9vbEVsZW1lbnQpOgorICAgICAgICAo
cmVjeWNsZUNvbXBvbmVudCk6CisgICAgICAgIChwb29sQ29tcG9uZW50KToKKyAgICAgICAgKG1v
dW50KToKKyAgICAgICAgKG1vdW50VGV4dCk6CisgICAgICAgIChtb3VudFZvaWQpOgorICAgICAg
ICAobW91bnRFbGVtZW50KToKKyAgICAgICAgKG1vdW50QXJyYXlDaGlsZHJlbik6CisgICAgICAg
IChtb3VudENvbXBvbmVudCk6CisgICAgICAgIChtb3VudFN0YXRlZnVsQ29tcG9uZW50Q2FsbGJh
Y2tzKToKKyAgICAgICAgKG1vdW50U3RhdGVsZXNzQ29tcG9uZW50Q2FsbGJhY2tzKToKKyAgICAg
ICAgKG1vdW50UmVmKToKKyAgICAgICAgKGNvcHlQcm9wc1RvKToKKyAgICAgICAgKGNyZWF0ZVN0
YXRlZnVsQ29tcG9uZW50SW5zdGFuY2UpOgorICAgICAgICAocmVwbGFjZUxhc3RDaGlsZEFuZFVu
bW91bnQpOgorICAgICAgICAocmVwbGFjZVZOb2RlKToKKyAgICAgICAgKGNyZWF0ZVN0YXRlbGVz
c0NvbXBvbmVudElucHV0KToKKyAgICAgICAgKHNldFRleHRDb250ZW50KToKKyAgICAgICAgKHVw
ZGF0ZVRleHRDb250ZW50KToKKyAgICAgICAgKGFwcGVuZENoaWxkKToKKyAgICAgICAgKGluc2Vy
dE9yQXBwZW5kKToKKyAgICAgICAgKGRvY3VtZW50Q3JlYXRlRWxlbWVudCk6CisgICAgICAgIChy
ZXBsYWNlV2l0aE5ld05vZGUpOgorICAgICAgICAocmVwbGFjZUNoaWxkKToKKyAgICAgICAgKHJl
bW92ZUNoaWxkKToKKyAgICAgICAgKHJlbW92ZUFsbENoaWxkcmVuKToKKyAgICAgICAgKHJlbW92
ZUNoaWxkcmVuKToKKyAgICAgICAgKGlzS2V5ZWQpOgorICAgICAgICAobm9ybWFsaXNlQ2hpbGRO
b2Rlcyk6CisgICAgICAgIChoeWRyYXRlQ29tcG9uZW50KToKKyAgICAgICAgKGh5ZHJhdGVFbGVt
ZW50KToKKyAgICAgICAgKGh5ZHJhdGVDaGlsZHJlbik6CisgICAgICAgIChoeWRyYXRlVGV4dCk6
CisgICAgICAgIChoeWRyYXRlVm9pZCk6CisgICAgICAgIChoeWRyYXRlKToKKyAgICAgICAgKGh5
ZHJhdGVSb290KToKKyAgICAgICAgKGVuYWJsZUZpbmRET01Ob2RlKToKKyAgICAgICAgKGZpbmRE
T01Ob2RlKToKKyAgICAgICAgKGdldFJvb3QpOgorICAgICAgICAoc2V0Um9vdCk6CisgICAgICAg
IChyZW5kZXIpOgorICAgICAgICAoY3JlYXRlUmVuZGVyZXIucmV0dXJuLnJlbmRlcmVyKToKKyAg
ICAgICAgKGNyZWF0ZVJlbmRlcmVyKToKKyAgICAgICAgKGxpbmtFdmVudCk6CisgICAgICAgIChm
YWxzZS50ZXN0RnVuYyk6CisgICAgICAgICh1cGRhdGVQYXJlbnRDb21wb25lbnRWTm9kZXMpOgor
ICAgICAgICAoYWRkVG9RdWV1ZSk6CisgICAgICAgIChxdWV1ZVN0YXRlQ2hhbmdlcyk6CisgICAg
ICAgIChDb21wb25lbnQuMSk6CisgICAgICAgIChDb21wb25lbnQuMS5wcm90b3R5cGUucmVuZGVy
KToKKyAgICAgICAgKENvbXBvbmVudC4xLnByb3RvdHlwZS5mb3JjZVVwZGF0ZSk6CisgICAgICAg
IChDb21wb25lbnQuMS5wcm90b3R5cGUuc2V0U3RhdGUpOgorICAgICAgICAoQ29tcG9uZW50LjEu
cHJvdG90eXBlLmNvbXBvbmVudFdpbGxNb3VudCk6CisgICAgICAgIChDb21wb25lbnQuMS5wcm90
b3R5cGUuY29tcG9uZW50RGlkTW91bnQpOgorICAgICAgICAoQ29tcG9uZW50LjEucHJvdG90eXBl
LmNvbXBvbmVudFdpbGxVbm1vdW50KToKKyAgICAgICAgKENvbXBvbmVudC4xLnByb3RvdHlwZS5j
b21wb25lbnREaWRVcGRhdGUpOgorICAgICAgICAoQ29tcG9uZW50LjEucHJvdG90eXBlLnNob3Vs
ZENvbXBvbmVudFVwZGF0ZSk6CisgICAgICAgIChDb21wb25lbnQuMS5wcm90b3R5cGUuY29tcG9u
ZW50V2lsbFJlY2VpdmVQcm9wcyk6CisgICAgICAgIChDb21wb25lbnQuMS5wcm90b3R5cGUuY29t
cG9uZW50V2lsbFVwZGF0ZSk6CisgICAgICAgIChDb21wb25lbnQuMS5wcm90b3R5cGUuZ2V0Q2hp
bGRDb250ZXh0KToKKyAgICAgICAgKENvbXBvbmVudC4xLnByb3RvdHlwZS5fdXBkYXRlQ29tcG9u
ZW50KToKKyAgICAgICAgKGZpbHRlcnMuZXhwb3J0cy5maWx0ZXJzLmFsbCk6CisgICAgICAgIChm
aWx0ZXJzLmV4cG9ydHMuZmlsdGVycy5hY3RpdmUpOgorICAgICAgICAoZmlsdGVycy5leHBvcnRz
LmZpbHRlcnMuY29tcGxldGVkKToKKyAgICAgICAgKHJlYWQpOgorICAgICAgICAoYXNzaWduKToK
KyAgICAgICAgKGlzRXF1YWwpOgorICAgICAgICAoSGVhZCk6CisgICAgICAgIChGb290KToKKyAg
ICAgICAgKE1vZGVsLk1vZGVsLnRoaXMpOgorICAgICAgICAoTW9kZWwuTW9kZWwudGhpcy5hZGQp
OgorICAgICAgICAoTW9kZWwuTW9kZWwudGhpcy5wdXQpOgorICAgICAgICAoTW9kZWwuTW9kZWwu
dGhpcy5kZWwpOgorICAgICAgICAoTW9kZWwuTW9kZWwudGhpcy50b2dnbGUpOgorICAgICAgICAo
TW9kZWwuTW9kZWwudGhpcy50b2dnbGVBbGwpOgorICAgICAgICAoTW9kZWwuTW9kZWwudGhpcy5j
bGVhckNvbXBsZXRlZCk6CisgICAgICAgIChNb2RlbCk6CisgICAgICAgIChfb2JqZWN0V2l0aG91
dFByb3BlcnRpZXMpOgorICAgICAgICAoSXRlbSk6CisgICAgICAgIChoYW5kbGVLZXlkb3duKToK
KyAgICAgICAgKGhhbmRsZUJsdXIpOgorICAgICAgICAoaGFuZGxlSW5wdXQpOgorICAgICAgICAo
SXRlbS5wcm90b3R5cGUucmVuZGVyKToKKyAgICAgICAgKF9pbml0aWFsaXNlUHJvcHMuX2luaXRp
YWxpc2VQcm9wcy50aGlzLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMpOgorICAgICAgICAoX2lu
aXRpYWxpc2VQcm9wcy5faW5pdGlhbGlzZVByb3BzLnRoaXMuc2hvdWxkQ29tcG9uZW50VXBkYXRl
KToKKyAgICAgICAgKF9pbml0aWFsaXNlUHJvcHMuX2luaXRpYWxpc2VQcm9wcy50aGlzLmNvbXBv
bmVudFdpbGxVcGRhdGUpOgorICAgICAgICAoX2luaXRpYWxpc2VQcm9wcy5faW5pdGlhbGlzZVBy
b3BzLnRoaXMuY29tcG9uZW50RGlkVXBkYXRlKToKKyAgICAgICAgKF9pbml0aWFsaXNlUHJvcHMu
X2luaXRpYWxpc2VQcm9wcy50aGlzLnNldFRleHQpOgorICAgICAgICAoX2luaXRpYWxpc2VQcm9w
cyk6CisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJl
LWV4YW1wbGVzL2luZmVybm8vaW5kZXguaHRtbDogQWRkZWQuCisgICAgICAgICogU3BlZWRvbWV0
ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2luZmVybm8vbm9kZV9t
b2R1bGVzL3RvZG9tdmMtYXBwLWNzcy9pbmRleC5jc3M6IEFkZGVkLgorICAgICAgICAoaHRtbCwp
OgorICAgICAgICAoYnV0dG9uKToKKyAgICAgICAgKGJvZHkpOgorICAgICAgICAoOmZvY3VzKToK
KyAgICAgICAgKC5oaWRkZW4pOgorICAgICAgICAoLnRvZG9hcHApOgorICAgICAgICAoLnRvZG9h
cHAgaW5wdXQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIpOgorICAgICAgICAoLnRvZG9hcHAg
aW5wdXQ6Oi1tb3otcGxhY2Vob2xkZXIpOgorICAgICAgICAoLnRvZG9hcHAgaW5wdXQ6OmlucHV0
LXBsYWNlaG9sZGVyKToKKyAgICAgICAgKC50b2RvYXBwIGgxKToKKyAgICAgICAgKC5uZXctdG9k
bywpOgorICAgICAgICAoLm5ldy10b2RvKToKKyAgICAgICAgKC5tYWluKToKKyAgICAgICAgKGxh
YmVsW2Zvcj0ndG9nZ2xlLWFsbCddKToKKyAgICAgICAgKC50b2dnbGUtYWxsKToKKyAgICAgICAg
KC50b2dnbGUtYWxsOmJlZm9yZSk6CisgICAgICAgICgudG9nZ2xlLWFsbDpjaGVja2VkOmJlZm9y
ZSk6CisgICAgICAgICgudG9kby1saXN0KToKKyAgICAgICAgKC50b2RvLWxpc3QgbGkpOgorICAg
ICAgICAoLnRvZG8tbGlzdCBsaTpsYXN0LWNoaWxkKToKKyAgICAgICAgKC50b2RvLWxpc3QgbGku
ZWRpdGluZyk6CisgICAgICAgICgudG9kby1saXN0IGxpLmVkaXRpbmcgLmVkaXQpOgorICAgICAg
ICAoLnRvZG8tbGlzdCBsaS5lZGl0aW5nIC52aWV3KToKKyAgICAgICAgKC50b2RvLWxpc3QgbGkg
LnRvZ2dsZSk6CisgICAgICAgICgudG9kby1saXN0IGxpIC50b2dnbGU6YWZ0ZXIpOgorICAgICAg
ICAoLnRvZG8tbGlzdCBsaSAudG9nZ2xlOmNoZWNrZWQ6YWZ0ZXIpOgorICAgICAgICAoLnRvZG8t
bGlzdCBsaSBsYWJlbCk6CisgICAgICAgICgudG9kby1saXN0IGxpLmNvbXBsZXRlZCBsYWJlbCk6
CisgICAgICAgICgudG9kby1saXN0IGxpIC5kZXN0cm95KToKKyAgICAgICAgKC50b2RvLWxpc3Qg
bGkgLmRlc3Ryb3k6aG92ZXIpOgorICAgICAgICAoLnRvZG8tbGlzdCBsaSAuZGVzdHJveTphZnRl
cik6CisgICAgICAgICgudG9kby1saXN0IGxpOmhvdmVyIC5kZXN0cm95KToKKyAgICAgICAgKC50
b2RvLWxpc3QgbGkgLmVkaXQpOgorICAgICAgICAoLnRvZG8tbGlzdCBsaS5lZGl0aW5nOmxhc3Qt
Y2hpbGQpOgorICAgICAgICAoLmZvb3Rlcik6CisgICAgICAgICguZm9vdGVyOmJlZm9yZSk6Cisg
ICAgICAgICgudG9kby1jb3VudCk6CisgICAgICAgICgudG9kby1jb3VudCBzdHJvbmcpOgorICAg
ICAgICAoLmZpbHRlcnMpOgorICAgICAgICAoLmZpbHRlcnMgbGkpOgorICAgICAgICAoLmZpbHRl
cnMgbGkgYSk6CisgICAgICAgICguZmlsdGVycyBsaSBhOmhvdmVyKToKKyAgICAgICAgKC5maWx0
ZXJzIGxpIGEuc2VsZWN0ZWQpOgorICAgICAgICAoLmNsZWFyLWNvbXBsZXRlZCwpOgorICAgICAg
ICAoLmNsZWFyLWNvbXBsZXRlZDpob3Zlcik6CisgICAgICAgICguaW5mbyk6CisgICAgICAgICgu
aW5mbyBwKToKKyAgICAgICAgKC5pbmZvIGEpOgorICAgICAgICAoLmluZm8gYTpob3Zlcik6Cisg
ICAgICAgIChAbWVkaWEgc2NyZWVuIGFuZCAoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlv
OjApKToKKyAgICAgICAgKC50b2dnbGUtYWxsLCk6CisgICAgICAgIChAbWVkaWEgKG1heC13aWR0
aDogNDMwcHgpKToKKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNo
aXRlY3R1cmUtZXhhbXBsZXMvaW5mZXJuby9ub2RlX21vZHVsZXMvdG9kb212Yy1hcHAtY3NzL3Bh
Y2thZ2UuanNvbjogQWRkZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9t
dmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2luZmVybm8vbm9kZV9tb2R1bGVzL3RvZG9tdmMtYXBw
LWNzcy9yZWFkbWUubWQ6IEFkZGVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90
b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9pbmZlcm5vL25vZGVfbW9kdWxlcy90b2RvbXZj
LWNvbW1vbi9iYXNlLmNzczogQWRkZWQuCisgICAgICAgIChocik6CisgICAgICAgICgubGVhcm4g
YSk6CisgICAgICAgICgubGVhcm4gYTpob3Zlcik6CisgICAgICAgICgubGVhcm4gaDMsKToKKyAg
ICAgICAgKC5sZWFybiBoMyk6CisgICAgICAgICgubGVhcm4gaDQpOgorICAgICAgICAoLmxlYXJu
IGg1KToKKyAgICAgICAgKC5sZWFybiB1bCk6CisgICAgICAgICgubGVhcm4gbGkpOgorICAgICAg
ICAoLmxlYXJuIHApOgorICAgICAgICAoI2lzc3VlLWNvdW50KToKKyAgICAgICAgKC5xdW90ZSk6
CisgICAgICAgICgucXVvdGUgcCk6CisgICAgICAgICgucXVvdGUgcDpiZWZvcmUpOgorICAgICAg
ICAoLnF1b3RlIHA6YWZ0ZXIpOgorICAgICAgICAoLnF1b3RlIGZvb3Rlcik6CisgICAgICAgICgu
cXVvdGUgZm9vdGVyIGltZyk6CisgICAgICAgICgucXVvdGUgZm9vdGVyIGEpOgorICAgICAgICAo
LnNwZWVjaC1idWJibGUpOgorICAgICAgICAoLnNwZWVjaC1idWJibGU6YWZ0ZXIpOgorICAgICAg
ICAoLmxlYXJuLWJhciA+IC5sZWFybik6CisgICAgICAgIChAbWVkaWEgKG1pbi13aWR0aDogODk5
cHgpKToKKyAgICAgICAgKC5sZWFybi1iYXIpOgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291
cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9pbmZlcm5vL25vZGVfbW9kdWxlcy90
b2RvbXZjLWNvbW1vbi9iYXNlLmpzOiBBZGRlZC4KKyAgICAgICAgKF8uZGVmYXVsdHMpOgorICAg
ICAgICAodGVtcGxhdGUpOgorICAgICAgICAoZXNjYXBlci5fLnRlbXBsYXRlKToKKyAgICAgICAg
KF8pOgorICAgICAgICAobG9jYXRpb24uaG9zdG5hbWUuc3RyaW5nX2FwcGVhcmVkX2hlcmUuaS5y
Lmkucik6CisgICAgICAgIChyZWRpcmVjdCk6CisgICAgICAgIChmaW5kUm9vdCk6CisgICAgICAg
ICh4aHIub25sb2FkKToKKyAgICAgICAgKGdldEZpbGUpOgorICAgICAgICAoTGVhcm4pOgorICAg
ICAgICAoTGVhcm4ucHJvdG90eXBlLmFwcGVuZCk6CisgICAgICAgIChMZWFybi5wcm90b3R5cGUu
ZmV0Y2hJc3N1ZUNvdW50KToKKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212
Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvaW5mZXJuby9ub2RlX21vZHVsZXMvdG9kb212Yy1jb21t
b24vcGFja2FnZS5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMv
dG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvaW5mZXJuby9ub2RlX21vZHVsZXMvdG9kb212
Yy1jb21tb24vcmVhZG1lLm1kOiBBZGRlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJj
ZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvaW5mZXJuby9wYWNrYWdlLmpzb246IEFk
ZGVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVy
ZS1leGFtcGxlcy9pbmZlcm5vL3NyYy9iYXNlLmpzOiBBZGRlZC4KKyAgICAgICAgKGV4cG9ydC5I
ZWFkKToKKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1
cmUtZXhhbXBsZXMvaW5mZXJuby9zcmMvaW5kZXguanM6IEFkZGVkLgorICAgICAgICAoQXBwLnBy
b3RvdHlwZS5jb21wb25lbnRXaWxsTW91bnQpOgorICAgICAgICAoQXBwLnByb3RvdHlwZS5lZGl0
KToKKyAgICAgICAgKEFwcC5wcm90b3R5cGUucmVuZGVyKToKKyAgICAgICAgKEFwcCk6CisgICAg
ICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVz
L2luZmVybm8vc3JjL2l0ZW0uanM6IEFkZGVkLgorICAgICAgICAoZXhwb3J0LmRlZmF1bHQuSXRl
bS5wcm90b3R5cGUucmVuZGVyKToKKyAgICAgICAgKGV4cG9ydC5kZWZhdWx0Lkl0ZW0pOgorICAg
ICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxl
cy9pbmZlcm5vL3NyYy9tb2RlbC5qczogQWRkZWQuCisgICAgICAgIChleHBvcnQuZGVmYXVsdC5N
b2RlbC5wcm90b3R5cGUuc2V0IGdldCBhcnIpOgorICAgICAgICAoZXhwb3J0LmRlZmF1bHQuTW9k
ZWwpOgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVy
ZS1leGFtcGxlcy9pbmZlcm5vL3NyYy9zaGFyZS5qczogQWRkZWQuCisgICAgICAgIChleHBvcnQu
cmVhZCk6CisgICAgICAgIChleHBvcnQuYXNzaWduKToKKyAgICAgICAgKGV4cG9ydC5pc0VxdWFs
KToKKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUt
ZXhhbXBsZXMvaW5mZXJuby93ZWJwYWNrLmNvbmZpZy5qczogQWRkZWQuCisKIDIwMTctMDQtMjUg
IE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQg
cGVyZm9ybWFuY2UgdGVzdCBmb3IgRm9udENhY2hlOjpzeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3Rl
cnMoKQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMv
dG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvaW5mZXJuby9kaXN0L2J1bmRsZS5qcyBiL1Bl
cmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJl
LWV4YW1wbGVzL2luZmVybm8vZGlzdC9idW5kbGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmE1NWU5N2RkZDkx
YzdlNGUzMjFjZTgxMzM2NjBkMjJiYmU1ZTc0YgotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1h
bmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1w
bGVzL2luZmVybm8vZGlzdC9idW5kbGUuanMKQEAgLTAsMCArMSwzMjQ4IEBACisvKioqKioqLyAo
ZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCisvKioqKioqLyAgICAvLyBU
aGUgbW9kdWxlIGNhY2hlCisvKioqKioqLyAgICB2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9Owor
CisvKioqKioqLyAgICAvLyBUaGUgcmVxdWlyZSBmdW5jdGlvbgorLyoqKioqKi8gICAgZnVuY3Rp
b24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkgeworCisvKioqKioqLyAgICAgICAgLy8g
Q2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlCisvKioqKioqLyAgICAgICAgaWYoaW5zdGFsbGVk
TW9kdWxlc1ttb2R1bGVJZF0pCisvKioqKioqLyAgICAgICAgICAgIHJldHVybiBpbnN0YWxsZWRN
b2R1bGVzW21vZHVsZUlkXS5leHBvcnRzOworCisvKioqKioqLyAgICAgICAgLy8gQ3JlYXRlIGEg
bmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSkKKy8qKioqKiovICAgICAgICB2
YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7CisvKioqKioqLyAgICAg
ICAgICAgIGV4cG9ydHM6IHt9LAorLyoqKioqKi8gICAgICAgICAgICBpZDogbW9kdWxlSWQsCisv
KioqKioqLyAgICAgICAgICAgIGxvYWRlZDogZmFsc2UKKy8qKioqKiovICAgICAgICB9OworCisv
KioqKioqLyAgICAgICAgLy8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uCisvKioqKioqLyAg
ICAgICAgbW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1
bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7CisKKy8qKioqKiovICAgICAgICAvLyBG
bGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkCisvKioqKioqLyAgICAgICAgbW9kdWxlLmxvYWRlZCA9
IHRydWU7CisKKy8qKioqKiovICAgICAgICAvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1v
ZHVsZQorLyoqKioqKi8gICAgICAgIHJldHVybiBtb2R1bGUuZXhwb3J0czsKKy8qKioqKiovICAg
IH0KKworCisvKioqKioqLyAgICAvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBh
Y2tfbW9kdWxlc19fKQorLyoqKioqKi8gICAgX193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxl
czsKKworLyoqKioqKi8gICAgLy8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGUKKy8qKioqKiovICAg
IF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7CisKKy8qKioqKiovICAg
IC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fCisvKioqKioqLyAgICBfX3dlYnBhY2tfcmVxdWly
ZV9fLnAgPSAiZGlzdCI7CisKKy8qKioqKiovICAgIC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCBy
ZXR1cm4gZXhwb3J0cworLyoqKioqKi8gICAgcmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oMCk7
CisvKioqKioqLyB9KQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKiovIChbCisvKiAwICovCisv
KioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHsKKwor
ICAgICd1c2Ugc3RyaWN0JzsKKworICAgIHZhciBfaW5mZXJubyA9IF9fd2VicGFja19yZXF1aXJl
X18oMSk7CisKKyAgICB2YXIgX2luZmVybm8yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaW5m
ZXJubyk7CisKKyAgICB2YXIgX2luZmVybm9Db21wb25lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KDMpOworCisgICAgdmFyIF9pbmZlcm5vQ29tcG9uZW50MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1
bHQoX2luZmVybm9Db21wb25lbnQpOworCisgICAgdmFyIF9zaGFyZSA9IF9fd2VicGFja19yZXF1
aXJlX18oNSk7CisKKyAgICB2YXIgX2Jhc2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpOworCisg
ICAgdmFyIF9tb2RlbCA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7CisKKyAgICB2YXIgX21vZGVs
MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX21vZGVsKTsKKworICAgIHZhciBfaXRlbSA9IF9f
d2VicGFja19yZXF1aXJlX18oOCk7CisKKyAgICB2YXIgX2l0ZW0yID0gX2ludGVyb3BSZXF1aXJl
RGVmYXVsdChfaXRlbSk7CisKKyAgICBmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9i
aikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmog
fTsgfQorCisgICAgZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rv
cikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcg
VHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKTsgfSB9CisKKyAg
ICBmdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICgh
c2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlh
bGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpOyB9IHJldHVybiBjYWxsICYmICh0
eXBlb2YgY2FsbCA9PT0gIm9iamVjdCIgfHwgdHlwZW9mIGNhbGwgPT09ICJmdW5jdGlvbiIpID8g
Y2FsbCA6IHNlbGY7IH0KKworICAgIGZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJD
bGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09ICJmdW5jdGlvbiIgJiYgc3VwZXJDbGFz
cyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3Qg
ZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90ICIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7
IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVy
Q2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVy
YWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYg
KHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVP
ZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNz
OyB9CisKKyAgICB2YXIgcmVuZGVyID0gX2luZmVybm8yLmRlZmF1bHQucmVuZGVyOworCisgICAg
dmFyIG1vZGVsID0gbmV3IF9tb2RlbDIuZGVmYXVsdCgpOworCisgICAgdmFyIEFwcCA9IGZ1bmN0
aW9uIChfQ29tcG9uZW50KSB7CisgICAgICAgIF9pbmhlcml0cyhBcHAsIF9Db21wb25lbnQpOwor
CisgICAgICAgIGZ1bmN0aW9uIEFwcCgpIHsKKyAgICAgICAgICAgIHZhciBfdGVtcCwgX3RoaXMs
IF9yZXQ7CisKKyAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBBcHApOworCisgICAg
ICAgICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9s
ZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykgeworICAgICAgICAgICAgICAgIGFy
Z3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHJldHVybiBfcmV0ID0gKF90ZW1wID0gKF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1
cm4odGhpcywgX0NvbXBvbmVudC5jYWxsLmFwcGx5KF9Db21wb25lbnQsIFt0aGlzXS5jb25jYXQo
YXJncykpKSwgX3RoaXMpLCBfdGhpcy5zdGF0ZSA9IHsKKyAgICAgICAgICAgICAgICByb3V0ZTog
KDAsIF9zaGFyZS5yZWFkKSgpLAorICAgICAgICAgICAgICAgIHRvZG9zOiBtb2RlbC5nZXQoKQor
ICAgICAgICAgICAgfSwgX3RoaXMudXBkYXRlID0gZnVuY3Rpb24gKGFycikgeworICAgICAgICAg
ICAgICAgIHJldHVybiBfdGhpcy5zZXRTdGF0ZSh7IHRvZG9zOiBhcnIgfSk7CisgICAgICAgICAg
ICB9LCBfdGhpcy5jb21wb25lbnRXaWxsTW91bnQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAg
ICAgICAgd2luZG93Lm9uaGFzaGNoYW5nZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIF90aGlzLnNldFN0YXRlKHsgcm91dGU6ICgwLCBfc2hhcmUucmVhZCkoKSB9
KTsKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfSwgX3RoaXMuYWRkID0gZnVuY3Rp
b24gKGUpIHsKKyAgICAgICAgICAgICAgICBpZiAoZS53aGljaCAhPT0gX3NoYXJlLkVOVEVSKSBy
ZXR1cm47CisKKyAgICAgICAgICAgICAgICB2YXIgdmFsID0gZS50YXJnZXQudmFsdWUudHJpbSgp
OworICAgICAgICAgICAgICAgIGlmICghdmFsKSByZXR1cm47CisKKyAgICAgICAgICAgICAgICBl
LnRhcmdldC52YWx1ZSA9ICcnOworICAgICAgICAgICAgICAgIF90aGlzLnVwZGF0ZShtb2RlbC5h
ZGQodmFsKSk7CisgICAgICAgICAgICB9LCBfdGhpcy5lZGl0ID0gZnVuY3Rpb24gKHRvZG8sIHZh
bCkgeworICAgICAgICAgICAgICAgIHZhbCA9IHZhbC50cmltKCk7CisgICAgICAgICAgICAgICAg
aWYgKHZhbC5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAgX3RoaXMudXBkYXRlKG1vZGVs
LnB1dCh0b2RvLCB7IHRpdGxlOiB2YWwsIGVkaXRpbmc6IDAgfSkpOworICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIF90aGlzLnJlbW92ZSh0b2RvKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9LCBfdGhpcy5mb2N1cyA9IGZ1bmN0aW9uICh0b2Rv
KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLnVwZGF0ZShtb2RlbC5wdXQodG9kbywg
eyBlZGl0aW5nOiAxIH0pKTsKKyAgICAgICAgICAgIH0sIF90aGlzLmJsdXIgPSBmdW5jdGlvbiAo
dG9kbykgeworICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy51cGRhdGUobW9kZWwucHV0KHRv
ZG8sIHsgZWRpdGluZzogMCB9KSk7CisgICAgICAgICAgICB9LCBfdGhpcy5yZW1vdmUgPSBmdW5j
dGlvbiAodG9kbykgeworICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy51cGRhdGUobW9kZWwu
ZGVsKHRvZG8pKTsKKyAgICAgICAgICAgIH0sIF90aGlzLnRvZ2dsZU9uZSA9IGZ1bmN0aW9uICh0
b2RvKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLnVwZGF0ZShtb2RlbC50b2dnbGUo
dG9kbykpOworICAgICAgICAgICAgfSwgX3RoaXMudG9nZ2xlQWxsID0gZnVuY3Rpb24gKGV2KSB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLnVwZGF0ZShtb2RlbC50b2dnbGVBbGwoZXYu
dGFyZ2V0LmNoZWNrZWQpKTsKKyAgICAgICAgICAgIH0sIF90aGlzLmNsZWFyQ29tcGxldGVkID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy51cGRhdGUobW9kZWwu
Y2xlYXJDb21wbGV0ZWQoKSk7CisgICAgICAgICAgICB9LCBfdGVtcCksIF9wb3NzaWJsZUNvbnN0
cnVjdG9yUmV0dXJuKF90aGlzLCBfcmV0KTsKKyAgICAgICAgfQorCisgICAgICAgIEFwcC5wcm90
b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKF8sIF9yZWYpIHsKKyAgICAgICAgICAgIHZh
ciBfdGhpczIgPSB0aGlzOworCisgICAgICAgICAgICB2YXIgdG9kb3MgPSBfcmVmLnRvZG9zLAor
ICAgICAgICAgICAgICAgIHJvdXRlID0gX3JlZi5yb3V0ZTsKKworICAgICAgICAgICAgdmFyIG51
bSA9IHRvZG9zLmxlbmd0aDsKKyAgICAgICAgICAgIHZhciBzaG93biA9IHRvZG9zLmZpbHRlcihf
c2hhcmUuZmlsdGVyc1tyb3V0ZV0pOworICAgICAgICAgICAgdmFyIG51bURvbmUgPSB0b2Rvcy5m
aWx0ZXIoX3NoYXJlLmZpbHRlcnMuY29tcGxldGVkKS5sZW5ndGg7CisgICAgICAgICAgICB2YXIg
bnVtQWN0ID0gbnVtIC0gbnVtRG9uZTsKKworICAgICAgICAgICAgcmV0dXJuIF9pbmZlcm5vMi5k
ZWZhdWx0LmNyZWF0ZVZOb2RlKDIsICdkaXYnLCBudWxsLCBbX2luZmVybm8yLmRlZmF1bHQuY3Jl
YXRlVk5vZGUoMTYsIF9iYXNlLkhlYWQsIHsKKyAgICAgICAgICAgICAgICAnb25FbnRlcic6IHRo
aXMuYWRkCisgICAgICAgICAgICB9KSwgbnVtID8gX2luZmVybm8yLmRlZmF1bHQuY3JlYXRlVk5v
ZGUoMiwgJ3NlY3Rpb24nLCB7CisgICAgICAgICAgICAgICAgJ2NsYXNzTmFtZSc6ICdtYWluJwor
ICAgICAgICAgICAgfSwgW19pbmZlcm5vMi5kZWZhdWx0LmNyZWF0ZVZOb2RlKDUxMiwgJ2lucHV0
JywgeworICAgICAgICAgICAgICAgICdjbGFzc05hbWUnOiAndG9nZ2xlLWFsbCcsCisgICAgICAg
ICAgICAgICAgJ3R5cGUnOiAnY2hlY2tib3gnLAorICAgICAgICAgICAgICAgICdjaGVja2VkJzog
bnVtQWN0ID09PSAwCisgICAgICAgICAgICB9LCBudWxsLCB7CisgICAgICAgICAgICAgICAgJ29u
Q2xpY2snOiB0aGlzLnRvZ2dsZUFsbAorICAgICAgICAgICAgfSksIF9pbmZlcm5vMi5kZWZhdWx0
LmNyZWF0ZVZOb2RlKDIsICd1bCcsIHsKKyAgICAgICAgICAgICAgICAnY2xhc3NOYW1lJzogJ3Rv
ZG8tbGlzdCcKKyAgICAgICAgICAgIH0sIHNob3duLm1hcChmdW5jdGlvbiAodCkgeworICAgICAg
ICAgICAgICAgIHJldHVybiBfaW5mZXJubzIuZGVmYXVsdC5jcmVhdGVWTm9kZSgxNiwgX2l0ZW0y
LmRlZmF1bHQsIHsKKyAgICAgICAgICAgICAgICAgICAgJ2RhdGEnOiB0LAorICAgICAgICAgICAg
ICAgICAgICAnb25CbHVyJzogZnVuY3Rpb24gb25CbHVyKCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIF90aGlzMi5ibHVyKHQpOworICAgICAgICAgICAgICAgICAgICB9LAorICAg
ICAgICAgICAgICAgICAgICAnb25Gb2N1cyc6IGZ1bmN0aW9uIG9uRm9jdXMoKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMyLmZvY3VzKHQpOworICAgICAgICAgICAgICAg
ICAgICB9LAorICAgICAgICAgICAgICAgICAgICAnZG9EZWxldGUnOiBmdW5jdGlvbiBkb0RlbGV0
ZSgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpczIucmVtb3ZlKHQpOwor
ICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAnZG9TYXZlJzogZnVu
Y3Rpb24gZG9TYXZlKHZhbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlz
Mi5lZGl0KHQsIHZhbCk7CisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAg
ICAgICdkb1RvZ2dsZSc6IGZ1bmN0aW9uIGRvVG9nZ2xlKCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIF90aGlzMi50b2dnbGVPbmUodCk7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pKV0pIDogbnVsbCwgbnVtQWN0IHx8
IG51bURvbmUgPyBfaW5mZXJubzIuZGVmYXVsdC5jcmVhdGVWTm9kZSgxNiwgX2Jhc2UuRm9vdCwg
eworICAgICAgICAgICAgICAgICdvbkNsZWFyJzogdGhpcy5jbGVhckNvbXBsZXRlZCwKKyAgICAg
ICAgICAgICAgICAnbGVmdCc6IG51bUFjdCwKKyAgICAgICAgICAgICAgICAnZG9uZSc6IG51bURv
bmUsCisgICAgICAgICAgICAgICAgJ3JvdXRlJzogcm91dGUKKyAgICAgICAgICAgIH0pIDogbnVs
bF0pOworICAgICAgICB9OworCisgICAgICAgIHJldHVybiBBcHA7CisgICAgfShfaW5mZXJub0Nv
bXBvbmVudDIuZGVmYXVsdCk7CisKKyAgICByZW5kZXIoX2luZmVybm8yLmRlZmF1bHQuY3JlYXRl
Vk5vZGUoMTYsIEFwcCksIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhcHAnKSk7CisKKy8qKiov
IH0sCisvKiAxICovCisvKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19y
ZXF1aXJlX18pIHsKKworICAgIG1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXygy
KTsKKworCisvKioqLyB9LAorLyogMiAqLworLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRz
LCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyAgICAvKiEKKyAgICAgKiBpbmZlcm5vIHYxLjAu
MC1iZXRhMzIKKyAgICAgKiAoYykgMjAxNiBEb21pbmljIEdhbm5hd2F5CisgICAgICogUmVsZWFz
ZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLgorICAgICAqLworICAgIChmdW5jdGlvbiAoZ2xvYmFs
LCBmYWN0b3J5KSB7CisgICAgICAgICB0cnVlID8gZmFjdG9yeShleHBvcnRzKSA6CisgICAgICAg
IHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJ2V4
cG9ydHMnXSwgZmFjdG9yeSkgOgorICAgICAgICAoZmFjdG9yeSgoZ2xvYmFsLkluZmVybm8gPSBn
bG9iYWwuSW5mZXJubyB8fCB7fSkpKTsKKyAgICB9KHRoaXMsIChmdW5jdGlvbiAoZXhwb3J0cykg
eyAndXNlIHN0cmljdCc7CisKKyAgICB2YXIgTk9fT1AgPSAnJE5PX09QJzsKKyAgICB2YXIgRVJS
T1JfTVNHID0gJ2EgcnVudGltZSBlcnJvciBvY2N1cmVkISBVc2UgSW5mZXJubyBpbiBkZXZlbG9w
bWVudCBlbnZpcm9ubWVudCB0byBmaW5kIHRoZSBlcnJvci4nOworICAgIHZhciBpc0Jyb3dzZXIg
PSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuZG9jdW1lbnQ7CisKKyAg
ICAvLyB0aGlzIGlzIE1VQ0ggZmFzdGVyIHRoYW4gLmNvbnN0cnVjdG9yID09PSBBcnJheSBhbmQg
aW5zdGFuY2VvZiBBcnJheQorICAgIC8vIGluIE5vZGUgNyBhbmQgdGhlIGxhdGVyIHZlcnNpb25z
IG9mIFY4LCBzbG93ZXIgaW4gb2xkZXIgdmVyc2lvbnMgdGhvdWdoCisgICAgdmFyIGlzQXJyYXkg
PSBBcnJheS5pc0FycmF5OworICAgIGZ1bmN0aW9uIGlzU3RhdGVmdWxDb21wb25lbnQobykgewor
ICAgICAgICByZXR1cm4gIWlzVW5kZWZpbmVkKG8ucHJvdG90eXBlKSAmJiAhaXNVbmRlZmluZWQo
by5wcm90b3R5cGUucmVuZGVyKTsKKyAgICB9CisgICAgZnVuY3Rpb24gaXNTdHJpbmdPck51bWJl
cihvYmopIHsKKyAgICAgICAgcmV0dXJuIGlzU3RyaW5nKG9iaikgfHwgaXNOdW1iZXIob2JqKTsK
KyAgICB9CisgICAgZnVuY3Rpb24gaXNOdWxsT3JVbmRlZihvYmopIHsKKyAgICAgICAgcmV0dXJu
IGlzVW5kZWZpbmVkKG9iaikgfHwgaXNOdWxsKG9iaik7CisgICAgfQorICAgIGZ1bmN0aW9uIGlz
SW52YWxpZChvYmopIHsKKyAgICAgICAgcmV0dXJuIGlzTnVsbChvYmopIHx8IG9iaiA9PT0gZmFs
c2UgfHwgaXNUcnVlKG9iaikgfHwgaXNVbmRlZmluZWQob2JqKTsKKyAgICB9CisgICAgZnVuY3Rp
b24gaXNGdW5jdGlvbihvYmopIHsKKyAgICAgICAgcmV0dXJuIHR5cGVvZiBvYmogPT09ICdmdW5j
dGlvbic7CisgICAgfQorICAgIGZ1bmN0aW9uIGlzQXR0ckFuRXZlbnQoYXR0cikgeworICAgICAg
ICByZXR1cm4gYXR0clswXSA9PT0gJ28nICYmIGF0dHJbMV0gPT09ICduJyAmJiBhdHRyLmxlbmd0
aCA+IDM7CisgICAgfQorICAgIGZ1bmN0aW9uIGlzU3RyaW5nKG9iaikgeworICAgICAgICByZXR1
cm4gdHlwZW9mIG9iaiA9PT0gJ3N0cmluZyc7CisgICAgfQorICAgIGZ1bmN0aW9uIGlzTnVtYmVy
KG9iaikgeworICAgICAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ251bWJlcic7CisgICAgfQor
ICAgIGZ1bmN0aW9uIGlzTnVsbChvYmopIHsKKyAgICAgICAgcmV0dXJuIG9iaiA9PT0gbnVsbDsK
KyAgICB9CisgICAgZnVuY3Rpb24gaXNUcnVlKG9iaikgeworICAgICAgICByZXR1cm4gb2JqID09
PSB0cnVlOworICAgIH0KKyAgICBmdW5jdGlvbiBpc1VuZGVmaW5lZChvYmopIHsKKyAgICAgICAg
cmV0dXJuIG9iaiA9PT0gdW5kZWZpbmVkOworICAgIH0KKyAgICBmdW5jdGlvbiBpc09iamVjdChv
KSB7CisgICAgICAgIHJldHVybiB0eXBlb2YgbyA9PT0gJ29iamVjdCc7CisgICAgfQorICAgIGZ1
bmN0aW9uIHRocm93RXJyb3IobWVzc2FnZSkgeworICAgICAgICBpZiAoIW1lc3NhZ2UpIHsKKyAg
ICAgICAgICAgIG1lc3NhZ2UgPSBFUlJPUl9NU0c7CisgICAgICAgIH0KKyAgICAgICAgdGhyb3cg
bmV3IEVycm9yKCgiSW5mZXJubyBFcnJvcjogIiArIG1lc3NhZ2UpKTsKKyAgICB9CisgICAgZnVu
Y3Rpb24gd2FybmluZyhjb25kaXRpb24sIG1lc3NhZ2UpIHsKKyAgICAgICAgaWYgKCFjb25kaXRp
b24pIHsKKyAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgdmFyIEVNUFRZX09CSiA9IHt9OworCisgICAgZnVuY3Rpb24gY2xvbmVWTm9kZSh2
Tm9kZVRvQ2xvbmUsIHByb3BzKSB7CisgICAgICAgIHZhciBfY2hpbGRyZW4gPSBbXSwgbGVuID0g
YXJndW1lbnRzLmxlbmd0aCAtIDI7CisgICAgICAgIHdoaWxlICggbGVuLS0gPiAwICkgX2NoaWxk
cmVuWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuICsgMiBdOworCisgICAgICAgIHZhciBjaGlsZHJl
biA9IF9jaGlsZHJlbjsKKyAgICAgICAgaWYgKF9jaGlsZHJlbi5sZW5ndGggPiAwICYmICFpc051
bGwoX2NoaWxkcmVuWzBdKSkgeworICAgICAgICAgICAgaWYgKCFwcm9wcykgeworICAgICAgICAg
ICAgICAgIHByb3BzID0ge307CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoX2NoaWxk
cmVuLmxlbmd0aCA9PT0gMSkgeworICAgICAgICAgICAgICAgIGNoaWxkcmVuID0gX2NoaWxkcmVu
WzBdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGlzVW5kZWZpbmVkKHByb3BzLmNo
aWxkcmVuKSkgeworICAgICAgICAgICAgICAgIHByb3BzLmNoaWxkcmVuID0gY2hpbGRyZW47Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNB
cnJheShjaGlsZHJlbikpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzQXJyYXkocHJvcHMu
Y2hpbGRyZW4pKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5jaGlsZHJlbiA9IHBy
b3BzLmNoaWxkcmVuLmNvbmNhdChjaGlsZHJlbik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5j
aGlsZHJlbiA9IFtwcm9wcy5jaGlsZHJlbl0uY29uY2F0KGNoaWxkcmVuKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGlzQXJyYXkocHJvcHMuY2hpbGRyZW4pKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBwcm9wcy5jaGlsZHJlbi5wdXNoKGNoaWxkcmVuKTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHByb3BzLmNoaWxkcmVuID0gW3Byb3BzLmNoaWxkcmVuXTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHByb3BzLmNoaWxkcmVuLnB1c2goY2hpbGRyZW4pOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIGNoaWxkcmVuID0gbnVsbDsKKyAgICAgICAgdmFyIGZsYWdzID0gdk5vZGVUb0Nsb25l
LmZsYWdzOworICAgICAgICB2YXIgZXZlbnRzID0gdk5vZGVUb0Nsb25lLmV2ZW50cyB8fCAocHJv
cHMgJiYgcHJvcHMuZXZlbnRzKSB8fCBudWxsOworICAgICAgICB2YXIgbmV3Vk5vZGU7CisgICAg
ICAgIGlmIChpc0FycmF5KHZOb2RlVG9DbG9uZSkpIHsKKyAgICAgICAgICAgIG5ld1ZOb2RlID0g
dk5vZGVUb0Nsb25lLm1hcChmdW5jdGlvbiAodk5vZGUpIHsgcmV0dXJuIGNsb25lVk5vZGUodk5v
ZGUpOyB9KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChpc051bGxPclVuZGVmKHByb3Bz
KSAmJiBpc051bGxPclVuZGVmKGNoaWxkcmVuKSkgeworICAgICAgICAgICAgbmV3Vk5vZGUgPSBP
YmplY3QuYXNzaWduKHt9LCB2Tm9kZVRvQ2xvbmUpOworICAgICAgICB9CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgdmFyIGtleSA9ICFpc051bGxPclVuZGVmKHZOb2RlVG9DbG9uZS5rZXkp
ID8gdk5vZGVUb0Nsb25lLmtleSA6IHByb3BzLmtleTsKKyAgICAgICAgICAgIHZhciByZWYgPSB2
Tm9kZVRvQ2xvbmUucmVmIHx8IHByb3BzLnJlZjsKKyAgICAgICAgICAgIGlmIChmbGFncyAmIDI4
IC8qIENvbXBvbmVudCAqLykgeworICAgICAgICAgICAgICAgIG5ld1ZOb2RlID0gY3JlYXRlVk5v
ZGUoZmxhZ3MsIHZOb2RlVG9DbG9uZS50eXBlLCBPYmplY3QuYXNzaWduKHt9LCB2Tm9kZVRvQ2xv
bmUucHJvcHMsIHByb3BzKSwgbnVsbCwgZXZlbnRzLCBrZXksIHJlZiwgdHJ1ZSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChmbGFncyAmIDM5NzAgLyogRWxlbWVudCAqLykg
eworICAgICAgICAgICAgICAgIGNoaWxkcmVuID0gKHByb3BzICYmIHByb3BzLmNoaWxkcmVuKSB8
fCB2Tm9kZVRvQ2xvbmUuY2hpbGRyZW47CisgICAgICAgICAgICAgICAgbmV3Vk5vZGUgPSBjcmVh
dGVWTm9kZShmbGFncywgdk5vZGVUb0Nsb25lLnR5cGUsIE9iamVjdC5hc3NpZ24oe30sIHZOb2Rl
VG9DbG9uZS5wcm9wcywgcHJvcHMpLCBjaGlsZHJlbiwgZXZlbnRzLCBrZXksIHJlZiwgIWNoaWxk
cmVuKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoZmxhZ3MgJiAyOCAv
KiBDb21wb25lbnQgKi8pIHsKKyAgICAgICAgICAgIHZhciBuZXdQcm9wcyA9IG5ld1ZOb2RlLnBy
b3BzOworICAgICAgICAgICAgaWYgKG5ld1Byb3BzKSB7CisgICAgICAgICAgICAgICAgdmFyIG5l
d0NoaWxkcmVuID0gbmV3UHJvcHMuY2hpbGRyZW47CisgICAgICAgICAgICAgICAgLy8gd2UgbmVl
ZCB0byBhbHNvIGNsb25lIGNvbXBvbmVudCBjaGlsZHJlbiB0aGF0IGFyZSBpbiBwcm9wcworICAg
ICAgICAgICAgICAgIC8vIGFzIHRoZSBjaGlsZHJlbiBtYXkgYWxzbyBoYXZlIGJlZW4gaG9pc3Rl
ZAorICAgICAgICAgICAgICAgIGlmIChuZXdDaGlsZHJlbikgeworICAgICAgICAgICAgICAgICAg
ICBpZiAoaXNBcnJheShuZXdDaGlsZHJlbikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgbmV3Q2hpbGRyZW4ubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgY2hpbGQgPSBuZXdDaGlsZHJlbltpXTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIWlzSW52YWxpZChjaGlsZCkgJiYgaXNWTm9kZShjaGlsZCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3UHJvcHMuY2hpbGRyZW5baV0g
PSBjbG9uZVZOb2RlKGNoaWxkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgZWxzZSBpZiAoaXNWTm9kZShuZXdDaGlsZHJlbikpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG5ld1Byb3BzLmNoaWxkcmVuID0gY2xvbmVWTm9kZShuZXdDaGlsZHJlbik7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBuZXdWTm9kZS5jaGlsZHJlbiA9IG51bGw7CisgICAgICAgIH0KKyAgICAgICAg
bmV3Vk5vZGUuZG9tID0gbnVsbDsKKyAgICAgICAgcmV0dXJuIG5ld1ZOb2RlOworICAgIH0KKwor
ICAgIGZ1bmN0aW9uIF9ub3JtYWxpemVWTm9kZXMobm9kZXMsIHJlc3VsdCwgaSkgeworICAgICAg
ICBmb3IgKDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB2YXIgbiA9IG5v
ZGVzW2ldOworICAgICAgICAgICAgaWYgKCFpc0ludmFsaWQobikpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoQXJyYXkuaXNBcnJheShuKSkgeworICAgICAgICAgICAgICAgICAgICBfbm9ybWFsaXpl
Vk5vZGVzKG4sIHJlc3VsdCwgMCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAoaXNTdHJpbmdPck51bWJlcihuKSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgbiA9IGNyZWF0ZVRleHRWTm9kZShuKTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChpc1ZOb2RlKG4pICYm
IG4uZG9tKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBuID0gY2xvbmVWTm9kZShuKTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChuKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAg
ZnVuY3Rpb24gbm9ybWFsaXplVk5vZGVzKG5vZGVzKSB7CisgICAgICAgIHZhciBuZXdOb2RlczsK
KyAgICAgICAgLy8gd2UgYXNzaWduICQgd2hpY2ggYmFzaWNhbGx5IG1lYW5zIHdlJ3ZlIGZsYWdn
ZWQgdGhpcyBhcnJheSBmb3IgZnV0dXJlIG5vdGUKKyAgICAgICAgLy8gaWYgaXQgY29tZXMgYmFj
ayBhZ2Fpbiwgd2UgbmVlZCB0byBjbG9uZSBpdCwgYXMgcGVvcGxlIGFyZSB1c2luZyBpdAorICAg
ICAgICAvLyBpbiBhbiBpbW11dGFibGUgd2F5CisgICAgICAgIC8vIHRzbGludDpkaXNhYmxlCisg
ICAgICAgIGlmIChub2Rlc1snJCddKSB7CisgICAgICAgICAgICBub2RlcyA9IG5vZGVzLnNsaWNl
KCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBub2Rlc1snJCddID0g
dHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAvLyB0c2xpbnQ6ZW5hYmxlCisgICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHZhciBuID0g
bm9kZXNbaV07CisgICAgICAgICAgICBpZiAoaXNJbnZhbGlkKG4pKSB7CisgICAgICAgICAgICAg
ICAgaWYgKCFuZXdOb2RlcykgeworICAgICAgICAgICAgICAgICAgICBuZXdOb2RlcyA9IG5vZGVz
LnNsaWNlKDAsIGkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBuZXdOb2Rl
cy5wdXNoKG4pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNB
cnJheShuKSkgeworICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSAobmV3Tm9kZXMgfHwgbm9k
ZXMpLnNsaWNlKDAsIGkpOworICAgICAgICAgICAgICAgIF9ub3JtYWxpemVWTm9kZXMobm9kZXMs
IHJlc3VsdCwgaSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGlzU3RyaW5nT3JOdW1iZXIobikpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoIW5ld05vZGVzKSB7CisgICAgICAgICAgICAgICAgICAgIG5ld05vZGVzID0g
bm9kZXMuc2xpY2UoMCwgaSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG5l
d05vZGVzLnB1c2goY3JlYXRlVGV4dFZOb2RlKG4pKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGVsc2UgaWYgKGlzVk5vZGUobikgJiYgbi5kb20pIHsKKyAgICAgICAgICAgICAgICBpZiAo
IW5ld05vZGVzKSB7CisgICAgICAgICAgICAgICAgICAgIG5ld05vZGVzID0gbm9kZXMuc2xpY2Uo
MCwgaSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG5ld05vZGVzLnB1c2go
Y2xvbmVWTm9kZShuKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChuZXdO
b2RlcykgeworICAgICAgICAgICAgICAgIG5ld05vZGVzLnB1c2goY2xvbmVWTm9kZShuKSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG5ld05vZGVzIHx8IG5vZGVz
OworICAgIH0KKyAgICBmdW5jdGlvbiBub3JtYWxpemVDaGlsZHJlbihjaGlsZHJlbikgeworICAg
ICAgICBpZiAoaXNBcnJheShjaGlsZHJlbikpIHsKKyAgICAgICAgICAgIHJldHVybiBub3JtYWxp
emVWTm9kZXMoY2hpbGRyZW4pOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGlzVk5vZGUo
Y2hpbGRyZW4pICYmIGNoaWxkcmVuLmRvbSkgeworICAgICAgICAgICAgcmV0dXJuIGNsb25lVk5v
ZGUoY2hpbGRyZW4pOworICAgICAgICB9CisgICAgICAgIHJldHVybiBjaGlsZHJlbjsKKyAgICB9
CisgICAgZnVuY3Rpb24gbm9ybWFsaXplUHJvcHModk5vZGUsIHByb3BzLCBjaGlsZHJlbikgewor
ICAgICAgICBpZiAoISh2Tm9kZS5mbGFncyAmIDI4IC8qIENvbXBvbmVudCAqLykgJiYgaXNOdWxs
T3JVbmRlZihjaGlsZHJlbikgJiYgIWlzTnVsbE9yVW5kZWYocHJvcHMuY2hpbGRyZW4pKSB7Cisg
ICAgICAgICAgICB2Tm9kZS5jaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuOworICAgICAgICB9Cisg
ICAgICAgIGlmIChwcm9wcy5yZWYpIHsKKyAgICAgICAgICAgIHZOb2RlLnJlZiA9IHByb3BzLnJl
ZjsKKyAgICAgICAgfQorICAgICAgICBpZiAocHJvcHMuZXZlbnRzKSB7CisgICAgICAgICAgICB2
Tm9kZS5ldmVudHMgPSBwcm9wcy5ldmVudHM7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFpc051
bGxPclVuZGVmKHByb3BzLmtleSkpIHsKKyAgICAgICAgICAgIHZOb2RlLmtleSA9IHByb3BzLmtl
eTsKKyAgICAgICAgfQorICAgIH0KKyAgICBmdW5jdGlvbiBub3JtYWxpemUodk5vZGUpIHsKKyAg
ICAgICAgdmFyIHByb3BzID0gdk5vZGUucHJvcHM7CisgICAgICAgIHZhciBjaGlsZHJlbiA9IHZO
b2RlLmNoaWxkcmVuOworICAgICAgICAvLyBjb252ZXJ0IGEgd3JvbmdseSBjcmVhdGVkIHR5cGUg
YmFjayB0byBlbGVtZW50CisgICAgICAgIGlmIChpc1N0cmluZyh2Tm9kZS50eXBlKSAmJiAodk5v
ZGUuZmxhZ3MgJiAyOCAvKiBDb21wb25lbnQgKi8pKSB7CisgICAgICAgICAgICB2Tm9kZS5mbGFn
cyA9IDM5NzAgLyogRWxlbWVudCAqLzsKKyAgICAgICAgfQorICAgICAgICBpZiAocHJvcHMpIHsK
KyAgICAgICAgICAgIG5vcm1hbGl6ZVByb3BzKHZOb2RlLCBwcm9wcywgY2hpbGRyZW4pOworICAg
ICAgICB9CisgICAgICAgIGlmICghaXNJbnZhbGlkKGNoaWxkcmVuKSkgeworICAgICAgICAgICAg
dk5vZGUuY2hpbGRyZW4gPSBub3JtYWxpemVDaGlsZHJlbihjaGlsZHJlbik7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKHByb3BzICYmICFpc0ludmFsaWQocHJvcHMuY2hpbGRyZW4pKSB7CisgICAg
ICAgICAgICBwcm9wcy5jaGlsZHJlbiA9IG5vcm1hbGl6ZUNoaWxkcmVuKHByb3BzLmNoaWxkcmVu
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBmdW5jdGlvbiBjcmVhdGVWTm9kZShmbGFncywgdHlw
ZSwgcHJvcHMsIGNoaWxkcmVuLCBldmVudHMsIGtleSwgcmVmLCBub05vcm1hbGlzZSkgeworICAg
ICAgICBpZiAoZmxhZ3MgJiAxNiAvKiBDb21wb25lbnRVbmtub3duICovKSB7CisgICAgICAgICAg
ICBmbGFncyA9IGlzU3RhdGVmdWxDb21wb25lbnQodHlwZSkgPyA0IC8qIENvbXBvbmVudENsYXNz
ICovIDogOCAvKiBDb21wb25lbnRGdW5jdGlvbiAqLzsKKyAgICAgICAgfQorICAgICAgICB2YXIg
dk5vZGUgPSB7CisgICAgICAgICAgICBjaGlsZHJlbjogaXNVbmRlZmluZWQoY2hpbGRyZW4pID8g
bnVsbCA6IGNoaWxkcmVuLAorICAgICAgICAgICAgZG9tOiBudWxsLAorICAgICAgICAgICAgZXZl
bnRzOiBldmVudHMgfHwgbnVsbCwKKyAgICAgICAgICAgIGZsYWdzOiBmbGFncyB8fCAwLAorICAg
ICAgICAgICAga2V5OiBrZXkgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBrZXksCisgICAgICAgICAg
ICBwcm9wczogcHJvcHMgfHwgbnVsbCwKKyAgICAgICAgICAgIHJlZjogcmVmIHx8IG51bGwsCisg
ICAgICAgICAgICB0eXBlOiB0eXBlCisgICAgICAgIH07CisgICAgICAgIGlmICghbm9Ob3JtYWxp
c2UpIHsKKyAgICAgICAgICAgIG5vcm1hbGl6ZSh2Tm9kZSk7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIHZOb2RlOworICAgIH0KKyAgICBmdW5jdGlvbiBjcmVhdGVWb2lkVk5vZGUoKSB7Cisg
ICAgICAgIHJldHVybiBjcmVhdGVWTm9kZSg0MDk2IC8qIFZvaWQgKi8pOworICAgIH0KKyAgICBm
dW5jdGlvbiBjcmVhdGVUZXh0Vk5vZGUodGV4dCkgeworICAgICAgICByZXR1cm4gY3JlYXRlVk5v
ZGUoMSAvKiBUZXh0ICovLCBudWxsLCBudWxsLCB0ZXh0KTsKKyAgICB9CisgICAgZnVuY3Rpb24g
aXNWTm9kZShvKSB7CisgICAgICAgIHJldHVybiAhIW8uZmxhZ3M7CisgICAgfQorCisgICAgdmFy
IGRldlRvb2xzU3RhdHVzID0geworICAgICAgICBjb25uZWN0ZWQ6IGZhbHNlCisgICAgfTsKKyAg
ICB2YXIgaW50ZXJuYWxJbmNyZW1lbnRlciA9IHsKKyAgICAgICAgaWQ6IDAKKyAgICB9OworICAg
IHZhciBjb21wb25lbnRJZE1hcCA9IG5ldyBNYXAoKTsKKyAgICBmdW5jdGlvbiBnZXRJbmNyZW1l
bnRhbElkKCkgeworICAgICAgICByZXR1cm4gaW50ZXJuYWxJbmNyZW1lbnRlci5pZCsrOworICAg
IH0KKyAgICBmdW5jdGlvbiBzZW5kVG9EZXZUb29scyhnbG9iYWwsIGRhdGEpIHsKKyAgICAgICAg
dmFyIGV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdpbmZlcm5vLmNsaWVudC5tZXNzYWdlJywgewor
ICAgICAgICAgICAgZGV0YWlsOiBKU09OLnN0cmluZ2lmeShkYXRhLCBmdW5jdGlvbiAoa2V5LCB2
YWwpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWlzTnVsbCh2YWwpICYmICFpc1VuZGVmaW5lZCh2
YWwpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChrZXkgPT09ICdfdkNvbXBvbmVudCcgfHwg
IWlzVW5kZWZpbmVkKHZhbC5ub2RlVHlwZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlm
IChpc0Z1bmN0aW9uKHZhbCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoIiQk
ZjoiICsgKHZhbC5uYW1lKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbDsKKyAgICAgICAgICAgIH0pCisgICAgICAg
IH0pOworICAgICAgICBnbG9iYWwuZGlzcGF0Y2hFdmVudChldmVudCk7CisgICAgfQorICAgIGZ1
bmN0aW9uIHJlcmVuZGVyUm9vdHMoKSB7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm9v
dHMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHZhciByb290ID0gcm9vdHNbaV07CisgICAg
ICAgICAgICByZW5kZXIocm9vdC5pbnB1dCwgcm9vdC5kb20pOworICAgICAgICB9CisgICAgfQor
ICAgIGZ1bmN0aW9uIGluaXREZXZUb29sc0hvb2tzKGdsb2JhbCkgeworICAgICAgICBnbG9iYWwu
X19JTkZFUk5PX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gPSByb290czsKKyAgICAgICAgZ2xvYmFs
LmFkZEV2ZW50TGlzdGVuZXIoJ2luZmVybm8uZGV2dG9vbHMubWVzc2FnZScsIGZ1bmN0aW9uICht
ZXNzYWdlKSB7CisgICAgICAgICAgICB2YXIgZGV0YWlsID0gSlNPTi5wYXJzZShtZXNzYWdlLmRl
dGFpbCk7CisgICAgICAgICAgICB2YXIgdHlwZSA9IGRldGFpbC50eXBlOworICAgICAgICAgICAg
c3dpdGNoICh0eXBlKSB7CisgICAgICAgICAgICAgICAgY2FzZSAnZ2V0LXJvb3RzJzoKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFkZXZUb29sc1N0YXR1cy5jb25uZWN0ZWQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGRldlRvb2xzU3RhdHVzLmNvbm5lY3RlZCA9IHRydWU7CisgICAgICAg
ICAgICAgICAgICAgICAgICByZXJlbmRlclJvb3RzKCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBzZW5kUm9vdHMoZ2xvYmFsKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
ICAgICAvLyBUT0RPOj8KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgIH0pOworICAgIH0KKyAgICBmdW5jdGlvbiBzZW5kUm9vdHMoZ2xvYmFsKSB7Cisg
ICAgICAgIHNlbmRUb0RldlRvb2xzKGdsb2JhbCwgeyB0eXBlOiAncm9vdHMnLCBkYXRhOiByb290
cyB9KTsKKyAgICB9CisKKyAgICB2YXIgTGlmZWN5Y2xlID0gZnVuY3Rpb24gTGlmZWN5Y2xlKCkg
eworICAgICAgICB0aGlzLmxpc3RlbmVycyA9IFtdOworICAgICAgICB0aGlzLmZhc3RVbm1vdW50
ID0gdHJ1ZTsKKyAgICB9OworICAgIExpZmVjeWNsZS5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBm
dW5jdGlvbiBhZGRMaXN0ZW5lciAoY2FsbGJhY2spIHsKKyAgICAgICAgdGhpcy5saXN0ZW5lcnMu
cHVzaChjYWxsYmFjayk7CisgICAgfTsKKyAgICBMaWZlY3ljbGUucHJvdG90eXBlLnRyaWdnZXIg
PSBmdW5jdGlvbiB0cmlnZ2VyICgpIHsKKyAgICAgICAgICAgIHZhciB0aGlzJDEgPSB0aGlzOwor
CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5saXN0ZW5lcnMubGVuZ3RoOyBpKysp
IHsKKyAgICAgICAgICAgIHRoaXMkMS5saXN0ZW5lcnNbaV0oKTsKKyAgICAgICAgfQorICAgIH07
CisKKyAgICBmdW5jdGlvbiBjb25zdHJ1Y3REZWZhdWx0cyhzdHJpbmcsIG9iamVjdCwgdmFsdWUp
IHsKKyAgICAgICAgLyogZXNsaW50IG5vLXJldHVybi1hc3NpZ246IDAgKi8KKyAgICAgICAgc3Ry
aW5nLnNwbGl0KCcsJykuZm9yRWFjaChmdW5jdGlvbiAoaSkgeyByZXR1cm4gb2JqZWN0W2ldID0g
dmFsdWU7IH0pOworICAgIH0KKyAgICB2YXIgeGxpbmtOUyA9ICdodHRwOi8vd3d3LnczLm9yZy8x
OTk5L3hsaW5rJzsKKyAgICB2YXIgeG1sTlMgPSAnaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgv
bmFtZXNwYWNlJzsKKyAgICB2YXIgc3ZnTlMgPSAnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcn
OworICAgIHZhciBzdHJpY3RQcm9wcyA9IHt9OworICAgIHZhciBib29sZWFuUHJvcHMgPSB7fTsK
KyAgICB2YXIgbmFtZXNwYWNlcyA9IHt9OworICAgIHZhciBpc1VuaXRsZXNzTnVtYmVyID0ge307
CisgICAgdmFyIHNraXBQcm9wcyA9IHt9OworICAgIHZhciBkZWh5cGhlblByb3BzID0geworICAg
ICAgICB0ZXh0QW5jaG9yOiAndGV4dC1hbmNob3InCisgICAgfTsKKyAgICB2YXIgZGVsZWdhdGVk
UHJvcHMgPSB7fTsKKyAgICBjb25zdHJ1Y3REZWZhdWx0cygneGxpbms6aHJlZix4bGluazphcmNy
b2xlLHhsaW5rOmFjdHVhdGUseGxpbms6cm9sZSx4bGluazp0aXRsZWYseGxpbms6dHlwZScsIG5h
bWVzcGFjZXMsIHhsaW5rTlMpOworICAgIGNvbnN0cnVjdERlZmF1bHRzKCd4bWw6YmFzZSx4bWw6
bGFuZyx4bWw6c3BhY2UnLCBuYW1lc3BhY2VzLCB4bWxOUyk7CisgICAgY29uc3RydWN0RGVmYXVs
dHMoJ3ZvbHVtZSxkZWZhdWx0VmFsdWUsZGVmYXVsdENoZWNrZWQnLCBzdHJpY3RQcm9wcywgdHJ1
ZSk7CisgICAgY29uc3RydWN0RGVmYXVsdHMoJ2NoaWxkcmVuLHJlZixrZXksc2VsZWN0ZWQsY2hl
Y2tlZCx2YWx1ZSxtdWx0aXBsZScsIHNraXBQcm9wcywgdHJ1ZSk7CisgICAgY29uc3RydWN0RGVm
YXVsdHMoJ29uQ2xpY2ssb25Nb3VzZURvd24sb25Nb3VzZVVwLG9uTW91c2VNb3ZlJywgZGVsZWdh
dGVkUHJvcHMsIHRydWUpOworICAgIGNvbnN0cnVjdERlZmF1bHRzKCdtdXRlZCxzY29wZWQsbG9v
cCxvcGVuLGNoZWNrZWQsZGVmYXVsdCxjYXB0dXJlLGRpc2FibGVkLHJlYWRvbmx5LHJlcXVpcmVk
LGF1dG9wbGF5LGNvbnRyb2xzLHNlYW1sZXNzLHJldmVyc2VkLGFsbG93ZnVsbHNjcmVlbixub3Zh
bGlkYXRlJywgYm9vbGVhblByb3BzLCB0cnVlKTsKKyAgICBjb25zdHJ1Y3REZWZhdWx0cygnYW5p
bWF0aW9uSXRlcmF0aW9uQ291bnQsYm9yZGVySW1hZ2VPdXRzZXQsYm9yZGVySW1hZ2VTbGljZSxi
b3JkZXJJbWFnZVdpZHRoLGJveEZsZXgsYm94RmxleEdyb3VwLGJveE9yZGluYWxHcm91cCxjb2x1
bW5Db3VudCxmbGV4LGZsZXhHcm93LGZsZXhQb3NpdGl2ZSxmbGV4U2hyaW5rLGZsZXhOZWdhdGl2
ZSxmbGV4T3JkZXIsZ3JpZFJvdyxncmlkQ29sdW1uLGZvbnRXZWlnaHQsbGluZUNsYW1wLGxpbmVI
ZWlnaHQsb3BhY2l0eSxvcmRlcixvcnBoYW5zLHRhYlNpemUsd2lkb3dzLHpJbmRleCx6b29tLGZp
bGxPcGFjaXR5LGZsb29kT3BhY2l0eSxzdG9wT3BhY2l0eSxzdHJva2VEYXNoYXJyYXksc3Ryb2tl
RGFzaG9mZnNldCxzdHJva2VNaXRlcmxpbWl0LHN0cm9rZU9wYWNpdHksc3Ryb2tlV2lkdGgsJywg
aXNVbml0bGVzc051bWJlciwgdHJ1ZSk7CisKKyAgICB2YXIgZGVsZWdhdGVkRXZlbnRzID0gbmV3
IE1hcCgpOworICAgIGZ1bmN0aW9uIGhhbmRsZUV2ZW50KG5hbWUsIGxhc3RFdmVudCwgbmV4dEV2
ZW50LCBkb20pIHsKKyAgICAgICAgdmFyIGRlbGVnYXRlZFJvb3RzID0gZGVsZWdhdGVkRXZlbnRz
LmdldChuYW1lKTsKKyAgICAgICAgaWYgKG5leHRFdmVudCkgeworICAgICAgICAgICAgaWYgKCFk
ZWxlZ2F0ZWRSb290cykgeworICAgICAgICAgICAgICAgIGRlbGVnYXRlZFJvb3RzID0geyBpdGVt
czogbmV3IE1hcCgpLCBjb3VudDogMCwgZG9jRXZlbnQ6IG51bGwgfTsKKyAgICAgICAgICAgICAg
ICB2YXIgZG9jRXZlbnQgPSBhdHRhY2hFdmVudFRvRG9jdW1lbnQobmFtZSwgZGVsZWdhdGVkUm9v
dHMpOworICAgICAgICAgICAgICAgIGRlbGVnYXRlZFJvb3RzLmRvY0V2ZW50ID0gZG9jRXZlbnQ7
CisgICAgICAgICAgICAgICAgZGVsZWdhdGVkRXZlbnRzLnNldChuYW1lLCBkZWxlZ2F0ZWRSb290
cyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWxhc3RFdmVudCkgeworICAgICAg
ICAgICAgICAgIGRlbGVnYXRlZFJvb3RzLmNvdW50Kys7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBkZWxlZ2F0ZWRSb290cy5pdGVtcy5zZXQoZG9tLCBuZXh0RXZlbnQpOworICAgICAgICB9
CisgICAgICAgIGVsc2UgaWYgKGRlbGVnYXRlZFJvb3RzKSB7CisgICAgICAgICAgICBpZiAoZGVs
ZWdhdGVkUm9vdHMuaXRlbXMuaGFzKGRvbSkpIHsKKyAgICAgICAgICAgICAgICBkZWxlZ2F0ZWRS
b290cy5jb3VudC0tOworICAgICAgICAgICAgICAgIGRlbGVnYXRlZFJvb3RzLml0ZW1zLmRlbGV0
ZShkb20pOworICAgICAgICAgICAgICAgIGlmIChkZWxlZ2F0ZWRSb290cy5jb3VudCA9PT0gMCkg
eworICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKG5vcm1h
bGl6ZUV2ZW50TmFtZShuYW1lKSwgZGVsZWdhdGVkUm9vdHMuZG9jRXZlbnQpOworICAgICAgICAg
ICAgICAgICAgICBkZWxlZ2F0ZWRFdmVudHMuZGVsZXRlKG5hbWUpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBmdW5jdGlvbiBkaXNwYXRj
aEV2ZW50KGV2ZW50LCBkb20sIGl0ZW1zLCBjb3VudCwgZXZlbnREYXRhKSB7CisgICAgICAgIHZh
ciBldmVudHNUb1RyaWdnZXIgPSBpdGVtcy5nZXQoZG9tKTsKKyAgICAgICAgaWYgKGV2ZW50c1Rv
VHJpZ2dlcikgeworICAgICAgICAgICAgY291bnQtLTsKKyAgICAgICAgICAgIC8vIGxpbmtFdmVu
dCBvYmplY3QKKyAgICAgICAgICAgIGV2ZW50RGF0YS5kb20gPSBkb207CisgICAgICAgICAgICBp
ZiAoZXZlbnRzVG9UcmlnZ2VyLmV2ZW50KSB7CisgICAgICAgICAgICAgICAgZXZlbnRzVG9Ucmln
Z2VyLmV2ZW50KGV2ZW50c1RvVHJpZ2dlci5kYXRhLCBldmVudCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBldmVudHNUb1RyaWdnZXIoZXZlbnQp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGV2ZW50RGF0YS5zdG9wUHJvcGFnYXRp
b24pIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgdmFyIHBhcmVudERvbSA9IGRvbS5wYXJlbnROb2RlOworICAgICAgICBpZiAoY291
bnQgPiAwICYmIChwYXJlbnREb20gfHwgcGFyZW50RG9tID09PSBkb2N1bWVudC5ib2R5KSkgewor
ICAgICAgICAgICAgZGlzcGF0Y2hFdmVudChldmVudCwgcGFyZW50RG9tLCBpdGVtcywgY291bnQs
IGV2ZW50RGF0YSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZnVuY3Rpb24gbm9ybWFsaXplRXZl
bnROYW1lKG5hbWUpIHsKKyAgICAgICAgcmV0dXJuIG5hbWUuc3Vic3RyKDIpLnRvTG93ZXJDYXNl
KCk7CisgICAgfQorICAgIGZ1bmN0aW9uIGF0dGFjaEV2ZW50VG9Eb2N1bWVudChuYW1lLCBkZWxl
Z2F0ZWRSb290cykgeworICAgICAgICB2YXIgZG9jRXZlbnQgPSBmdW5jdGlvbiAoZXZlbnQpIHsK
KyAgICAgICAgICAgIHZhciBldmVudERhdGEgPSB7CisgICAgICAgICAgICAgICAgc3RvcFByb3Bh
Z2F0aW9uOiBmYWxzZSwKKyAgICAgICAgICAgICAgICBkb206IGRvY3VtZW50CisgICAgICAgICAg
ICB9OworICAgICAgICAgICAgLy8gd2UgaGF2ZSB0byBkbyB0aGlzIGFzIHNvbWUgYnJvd3NlcnMg
cmVjeWNsZSB0aGUgc2FtZSBFdmVudCBiZXR3ZWVuIGNhbGxzCisgICAgICAgICAgICAvLyBzbyB3
ZSBuZWVkIHRvIG1ha2UgdGhlIHByb3BlcnR5IGNvbmZpZ3VyYWJsZQorICAgICAgICAgICAgT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KGV2ZW50LCAnY3VycmVudFRhcmdldCcsIHsKKyAgICAgICAgICAg
ICAgICBjb25maWd1cmFibGU6IHRydWUsCisgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBn
ZXQoKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBldmVudERhdGEuZG9tOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgZXZlbnQuc3RvcFByb3Bh
Z2F0aW9uID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIGV2ZW50RGF0YS5zdG9wUHJv
cGFnYXRpb24gPSB0cnVlOworICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIHZhciBjb3VudCA9
IGRlbGVnYXRlZFJvb3RzLmNvdW50OworICAgICAgICAgICAgaWYgKGNvdW50ID4gMCkgeworICAg
ICAgICAgICAgICAgIGRpc3BhdGNoRXZlbnQoZXZlbnQsIGV2ZW50LnRhcmdldCwgZGVsZWdhdGVk
Um9vdHMuaXRlbXMsIGNvdW50LCBldmVudERhdGEpOworICAgICAgICAgICAgfQorICAgICAgICB9
OworICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKG5vcm1hbGl6ZUV2ZW50TmFtZShu
YW1lKSwgZG9jRXZlbnQpOworICAgICAgICByZXR1cm4gZG9jRXZlbnQ7CisgICAgfQorCisgICAg
ZnVuY3Rpb24gaXNDaGVja2VkVHlwZSh0eXBlKSB7CisgICAgICAgIHJldHVybiB0eXBlID09PSAn
Y2hlY2tib3gnIHx8IHR5cGUgPT09ICdyYWRpbyc7CisgICAgfQorICAgIGZ1bmN0aW9uIGlzQ29u
dHJvbGxlZChwcm9wcykgeworICAgICAgICB2YXIgdXNlc0NoZWNrZWQgPSBpc0NoZWNrZWRUeXBl
KHByb3BzLnR5cGUpOworICAgICAgICByZXR1cm4gdXNlc0NoZWNrZWQgPyAhaXNOdWxsT3JVbmRl
Zihwcm9wcy5jaGVja2VkKSA6ICFpc051bGxPclVuZGVmKHByb3BzLnZhbHVlKTsKKyAgICB9Cisg
ICAgZnVuY3Rpb24gb25UZXh0SW5wdXRDaGFuZ2UoZSkgeworICAgICAgICB2YXIgdk5vZGUgPSB0
aGlzLnZOb2RlOworICAgICAgICB2YXIgZXZlbnRzID0gdk5vZGUuZXZlbnRzIHx8IEVNUFRZX09C
SjsKKyAgICAgICAgdmFyIGRvbSA9IHZOb2RlLmRvbTsKKyAgICAgICAgaWYgKGV2ZW50cy5vbklu
cHV0KSB7CisgICAgICAgICAgICBldmVudHMub25JbnB1dChlKTsKKyAgICAgICAgfQorICAgICAg
ICBlbHNlIGlmIChldmVudHMub25pbnB1dCkgeworICAgICAgICAgICAgZXZlbnRzLm9uaW5wdXQo
ZSk7CisgICAgICAgIH0KKyAgICAgICAgLy8gdGhlIHVzZXIgbWF5IGhhdmUgdXBkYXRlZCB0aGUg
dk5vZGUgZnJvbSB0aGUgYWJvdmUgb25JbnB1dCBldmVudHMKKyAgICAgICAgLy8gc28gd2UgbmVl
ZCB0byBnZXQgaXQgZnJvbSB0aGUgY29udGV4dCBvZiBgdGhpc2AgYWdhaW4KKyAgICAgICAgYXBw
bHlWYWx1ZSh0aGlzLnZOb2RlLCBkb20pOworICAgIH0KKyAgICBmdW5jdGlvbiBvbkNoZWNrYm94
Q2hhbmdlKGUpIHsKKyAgICAgICAgdmFyIHZOb2RlID0gdGhpcy52Tm9kZTsKKyAgICAgICAgdmFy
IGV2ZW50cyA9IHZOb2RlLmV2ZW50cyB8fCBFTVBUWV9PQko7CisgICAgICAgIHZhciBkb20gPSB2
Tm9kZS5kb207CisgICAgICAgIGlmIChldmVudHMub25DbGljaykgeworICAgICAgICAgICAgZXZl
bnRzLm9uQ2xpY2soZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoZXZlbnRzLm9uY2xp
Y2spIHsKKyAgICAgICAgICAgIGV2ZW50cy5vbmNsaWNrKGUpOworICAgICAgICB9CisgICAgICAg
IC8vIHRoZSB1c2VyIG1heSBoYXZlIHVwZGF0ZWQgdGhlIHZOb2RlIGZyb20gdGhlIGFib3ZlIG9u
Q2xpY2sgZXZlbnRzCisgICAgICAgIC8vIHNvIHdlIG5lZWQgdG8gZ2V0IGl0IGZyb20gdGhlIGNv
bnRleHQgb2YgYHRoaXNgIGFnYWluCisgICAgICAgIGFwcGx5VmFsdWUodGhpcy52Tm9kZSwgZG9t
KTsKKyAgICB9CisgICAgZnVuY3Rpb24gaGFuZGxlQXNzb2NpYXRlZFJhZGlvSW5wdXRzKG5hbWUp
IHsKKyAgICAgICAgdmFyIGlucHV0cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoKCJpbnB1
dFt0eXBlPVwicmFkaW9cIl1bbmFtZT1cIiIgKyBuYW1lICsgIlwiXSIpKTsKKyAgICAgICAgW10u
Zm9yRWFjaC5jYWxsKGlucHV0cywgZnVuY3Rpb24gKGRvbSkgeworICAgICAgICAgICAgdmFyIGlu
cHV0V3JhcHBlciA9IHdyYXBwZXJzLmdldChkb20pOworICAgICAgICAgICAgaWYgKGlucHV0V3Jh
cHBlcikgeworICAgICAgICAgICAgICAgIHZhciBwcm9wcyA9IGlucHV0V3JhcHBlci52Tm9kZS5w
cm9wczsKKyAgICAgICAgICAgICAgICBpZiAocHJvcHMpIHsKKyAgICAgICAgICAgICAgICAgICAg
ZG9tLmNoZWNrZWQgPSBpbnB1dFdyYXBwZXIudk5vZGUucHJvcHMuY2hlY2tlZDsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH0KKyAgICBmdW5jdGlv
biBwcm9jZXNzSW5wdXQodk5vZGUsIGRvbSkgeworICAgICAgICB2YXIgcHJvcHMgPSB2Tm9kZS5w
cm9wcyB8fCBFTVBUWV9PQko7CisgICAgICAgIGFwcGx5VmFsdWUodk5vZGUsIGRvbSk7CisgICAg
ICAgIGlmIChpc0NvbnRyb2xsZWQocHJvcHMpKSB7CisgICAgICAgICAgICB2YXIgaW5wdXRXcmFw
cGVyID0gd3JhcHBlcnMuZ2V0KGRvbSk7CisgICAgICAgICAgICBpZiAoIWlucHV0V3JhcHBlcikg
eworICAgICAgICAgICAgICAgIGlucHV0V3JhcHBlciA9IHsKKyAgICAgICAgICAgICAgICAgICAg
dk5vZGU6IHZOb2RlCisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICBpZiAoaXND
aGVja2VkVHlwZShwcm9wcy50eXBlKSkgeworICAgICAgICAgICAgICAgICAgICBkb20ub25jbGlj
ayA9IG9uQ2hlY2tib3hDaGFuZ2UuYmluZChpbnB1dFdyYXBwZXIpOworICAgICAgICAgICAgICAg
ICAgICBkb20ub25jbGljay53cmFwcGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGRvbS5vbmlucHV0ID0gb25U
ZXh0SW5wdXRDaGFuZ2UuYmluZChpbnB1dFdyYXBwZXIpOworICAgICAgICAgICAgICAgICAgICBk
b20ub25pbnB1dC53cmFwcGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgd3JhcHBlcnMuc2V0KGRvbSwgaW5wdXRXcmFwcGVyKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlucHV0V3JhcHBlci52Tm9kZSA9IHZOb2RlOworICAgICAgICB9CisgICAgfQor
ICAgIGZ1bmN0aW9uIGFwcGx5VmFsdWUodk5vZGUsIGRvbSkgeworICAgICAgICB2YXIgcHJvcHMg
PSB2Tm9kZS5wcm9wcyB8fCBFTVBUWV9PQko7CisgICAgICAgIHZhciB0eXBlID0gcHJvcHMudHlw
ZTsKKyAgICAgICAgdmFyIHZhbHVlID0gcHJvcHMudmFsdWU7CisgICAgICAgIHZhciBjaGVja2Vk
ID0gcHJvcHMuY2hlY2tlZDsKKyAgICAgICAgaWYgKHR5cGUgIT09IGRvbS50eXBlICYmIHR5cGUp
IHsKKyAgICAgICAgICAgIGRvbS50eXBlID0gdHlwZTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
cHJvcHMubXVsdGlwbGUgIT09IGRvbS5tdWx0aXBsZSkgeworICAgICAgICAgICAgZG9tLm11bHRp
cGxlID0gcHJvcHMubXVsdGlwbGU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlzQ2hlY2tlZFR5
cGUodHlwZSkpIHsKKyAgICAgICAgICAgIGlmICghaXNOdWxsT3JVbmRlZih2YWx1ZSkpIHsKKyAg
ICAgICAgICAgICAgICBkb20udmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGRvbS5jaGVja2VkID0gY2hlY2tlZDsKKyAgICAgICAgICAgIGlmICh0eXBlID09PSAncmFk
aW8nICYmIHByb3BzLm5hbWUpIHsKKyAgICAgICAgICAgICAgICBoYW5kbGVBc3NvY2lhdGVkUmFk
aW9JbnB1dHMocHJvcHMubmFtZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICBpZiAoIWlzTnVsbE9yVW5kZWYodmFsdWUpICYmIGRvbS52YWx1
ZSAhPT0gdmFsdWUpIHsKKyAgICAgICAgICAgICAgICBkb20udmFsdWUgPSB2YWx1ZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKCFpc051bGxPclVuZGVmKGNoZWNrZWQpKSB7
CisgICAgICAgICAgICAgICAgZG9tLmNoZWNrZWQgPSBjaGVja2VkOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gaXNDb250cm9sbGVkJDEocHJvcHMpIHsK
KyAgICAgICAgcmV0dXJuICFpc051bGxPclVuZGVmKHByb3BzLnZhbHVlKTsKKyAgICB9CisgICAg
ZnVuY3Rpb24gdXBkYXRlQ2hpbGRPcHRpb24odk5vZGUsIHZhbHVlKSB7CisgICAgICAgIHZhciBw
cm9wcyA9IHZOb2RlLnByb3BzIHx8IEVNUFRZX09CSjsKKyAgICAgICAgdmFyIGRvbSA9IHZOb2Rl
LmRvbTsKKyAgICAgICAgLy8gd2UgZG8gdGhpcyBhcyBtdWx0aXBsZSBtYXkgaGF2ZSBjaGFuZ2Vk
CisgICAgICAgIGRvbS52YWx1ZSA9IHByb3BzLnZhbHVlOworICAgICAgICBpZiAoKGlzQXJyYXko
dmFsdWUpICYmIHZhbHVlLmluZGV4T2YocHJvcHMudmFsdWUpICE9PSAtMSkgfHwgcHJvcHMudmFs
dWUgPT09IHZhbHVlKSB7CisgICAgICAgICAgICBkb20uc2VsZWN0ZWQgPSB0cnVlOworICAgICAg
ICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZG9tLnNlbGVjdGVkID0gcHJvcHMuc2Vs
ZWN0ZWQgfHwgZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgZnVuY3Rpb24gb25TZWxlY3RD
aGFuZ2UoZSkgeworICAgICAgICB2YXIgdk5vZGUgPSB0aGlzLnZOb2RlOworICAgICAgICB2YXIg
ZXZlbnRzID0gdk5vZGUuZXZlbnRzIHx8IEVNUFRZX09CSjsKKyAgICAgICAgdmFyIGRvbSA9IHZO
b2RlLmRvbTsKKyAgICAgICAgaWYgKGV2ZW50cy5vbkNoYW5nZSkgeworICAgICAgICAgICAgZXZl
bnRzLm9uQ2hhbmdlKGUpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGV2ZW50cy5vbmNo
YW5nZSkgeworICAgICAgICAgICAgZXZlbnRzLm9uY2hhbmdlKGUpOworICAgICAgICB9CisgICAg
ICAgIC8vIHRoZSB1c2VyIG1heSBoYXZlIHVwZGF0ZWQgdGhlIHZOb2RlIGZyb20gdGhlIGFib3Zl
IG9uQ2hhbmdlIGV2ZW50cworICAgICAgICAvLyBzbyB3ZSBuZWVkIHRvIGdldCBpdCBmcm9tIHRo
ZSBjb250ZXh0IG9mIGB0aGlzYCBhZ2FpbgorICAgICAgICBhcHBseVZhbHVlJDEodGhpcy52Tm9k
ZSwgZG9tKTsKKyAgICB9CisgICAgZnVuY3Rpb24gcHJvY2Vzc1NlbGVjdCh2Tm9kZSwgZG9tKSB7
CisgICAgICAgIHZhciBwcm9wcyA9IHZOb2RlLnByb3BzIHx8IEVNUFRZX09CSjsKKyAgICAgICAg
YXBwbHlWYWx1ZSQxKHZOb2RlLCBkb20pOworICAgICAgICBpZiAoaXNDb250cm9sbGVkJDEocHJv
cHMpKSB7CisgICAgICAgICAgICB2YXIgc2VsZWN0V3JhcHBlciA9IHdyYXBwZXJzLmdldChkb20p
OworICAgICAgICAgICAgaWYgKCFzZWxlY3RXcmFwcGVyKSB7CisgICAgICAgICAgICAgICAgc2Vs
ZWN0V3JhcHBlciA9IHsKKyAgICAgICAgICAgICAgICAgICAgdk5vZGU6IHZOb2RlCisgICAgICAg
ICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICBkb20ub25jaGFuZ2UgPSBvblNlbGVjdENoYW5n
ZS5iaW5kKHNlbGVjdFdyYXBwZXIpOworICAgICAgICAgICAgICAgIGRvbS5vbmNoYW5nZS53cmFw
cGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB3cmFwcGVycy5zZXQoZG9tLCBzZWxlY3RXcmFw
cGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNlbGVjdFdyYXBwZXIudk5vZGUgPSB2
Tm9kZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBmdW5jdGlvbiBhcHBseVZhbHVlJDEodk5vZGUs
IGRvbSkgeworICAgICAgICB2YXIgcHJvcHMgPSB2Tm9kZS5wcm9wcyB8fCBFTVBUWV9PQko7Cisg
ICAgICAgIGlmIChwcm9wcy5tdWx0aXBsZSAhPT0gZG9tLm11bHRpcGxlKSB7CisgICAgICAgICAg
ICBkb20ubXVsdGlwbGUgPSBwcm9wcy5tdWx0aXBsZTsKKyAgICAgICAgfQorICAgICAgICB2YXIg
Y2hpbGRyZW4gPSB2Tm9kZS5jaGlsZHJlbjsKKyAgICAgICAgdmFyIHZhbHVlID0gcHJvcHMudmFs
dWU7CisgICAgICAgIGlmIChpc0FycmF5KGNoaWxkcmVuKSkgeworICAgICAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIHVw
ZGF0ZUNoaWxkT3B0aW9uKGNoaWxkcmVuW2ldLCB2YWx1ZSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaXNWTm9kZShjaGlsZHJlbikpIHsKKyAgICAgICAgICAg
IHVwZGF0ZUNoaWxkT3B0aW9uKGNoaWxkcmVuLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBmdW5jdGlvbiBpc0NvbnRyb2xsZWQkMihwcm9wcykgeworICAgICAgICByZXR1cm4gIWlz
TnVsbE9yVW5kZWYocHJvcHMudmFsdWUpOworICAgIH0KKyAgICBmdW5jdGlvbiBvblRleHRhcmVh
SW5wdXRDaGFuZ2UoZSkgeworICAgICAgICB2YXIgdk5vZGUgPSB0aGlzLnZOb2RlOworICAgICAg
ICB2YXIgZXZlbnRzID0gdk5vZGUuZXZlbnRzIHx8IEVNUFRZX09CSjsKKyAgICAgICAgdmFyIGRv
bSA9IHZOb2RlLmRvbTsKKyAgICAgICAgaWYgKGV2ZW50cy5vbklucHV0KSB7CisgICAgICAgICAg
ICBldmVudHMub25JbnB1dChlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChldmVudHMu
b25pbnB1dCkgeworICAgICAgICAgICAgZXZlbnRzLm9uaW5wdXQoZSk7CisgICAgICAgIH0KKyAg
ICAgICAgLy8gdGhlIHVzZXIgbWF5IGhhdmUgdXBkYXRlZCB0aGUgdk5vZGUgZnJvbSB0aGUgYWJv
dmUgb25JbnB1dCBldmVudHMKKyAgICAgICAgLy8gc28gd2UgbmVlZCB0byBnZXQgaXQgZnJvbSB0
aGUgY29udGV4dCBvZiBgdGhpc2AgYWdhaW4KKyAgICAgICAgYXBwbHlWYWx1ZSQyKHRoaXMudk5v
ZGUsIGRvbSk7CisgICAgfQorICAgIGZ1bmN0aW9uIHByb2Nlc3NUZXh0YXJlYSh2Tm9kZSwgZG9t
KSB7CisgICAgICAgIHZhciBwcm9wcyA9IHZOb2RlLnByb3BzIHx8IEVNUFRZX09CSjsKKyAgICAg
ICAgYXBwbHlWYWx1ZSQyKHZOb2RlLCBkb20pOworICAgICAgICB2YXIgdGV4dGFyZWFXcmFwcGVy
ID0gd3JhcHBlcnMuZ2V0KGRvbSk7CisgICAgICAgIGlmIChpc0NvbnRyb2xsZWQkMihwcm9wcykp
IHsKKyAgICAgICAgICAgIGlmICghdGV4dGFyZWFXcmFwcGVyKSB7CisgICAgICAgICAgICAgICAg
dGV4dGFyZWFXcmFwcGVyID0geworICAgICAgICAgICAgICAgICAgICB2Tm9kZTogdk5vZGUKKyAg
ICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIGRvbS5vbmlucHV0ID0gb25UZXh0YXJl
YUlucHV0Q2hhbmdlLmJpbmQodGV4dGFyZWFXcmFwcGVyKTsKKyAgICAgICAgICAgICAgICBkb20u
b25pbnB1dC53cmFwcGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB3cmFwcGVycy5zZXQoZG9t
LCB0ZXh0YXJlYVdyYXBwZXIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGV4dGFyZWFX
cmFwcGVyLnZOb2RlID0gdk5vZGU7CisgICAgICAgIH0KKyAgICB9CisgICAgZnVuY3Rpb24gYXBw
bHlWYWx1ZSQyKHZOb2RlLCBkb20pIHsKKyAgICAgICAgdmFyIHByb3BzID0gdk5vZGUucHJvcHMg
fHwgRU1QVFlfT0JKOworICAgICAgICB2YXIgdmFsdWUgPSBwcm9wcy52YWx1ZTsKKyAgICAgICAg
aWYgKGRvbS52YWx1ZSAhPT0gdmFsdWUpIHsKKyAgICAgICAgICAgIGRvbS52YWx1ZSA9IHZhbHVl
OworICAgICAgICB9CisgICAgfQorCisgICAgdmFyIHdyYXBwZXJzID0gbmV3IE1hcCgpOworICAg
IGZ1bmN0aW9uIHByb2Nlc3NFbGVtZW50KGZsYWdzLCB2Tm9kZSwgZG9tKSB7CisgICAgICAgIGlm
IChmbGFncyAmIDUxMiAvKiBJbnB1dEVsZW1lbnQgKi8pIHsKKyAgICAgICAgICAgIHByb2Nlc3NJ
bnB1dCh2Tm9kZSwgZG9tKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChmbGFncyAmIDIw
NDggLyogU2VsZWN0RWxlbWVudCAqLykgeworICAgICAgICAgICAgcHJvY2Vzc1NlbGVjdCh2Tm9k
ZSwgZG9tKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChmbGFncyAmIDEwMjQgLyogVGV4
dGFyZWFFbGVtZW50ICovKSB7CisgICAgICAgICAgICBwcm9jZXNzVGV4dGFyZWEodk5vZGUsIGRv
bSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiB1bm1vdW50KHZOb2RlLCBwYXJl
bnREb20sIGxpZmVjeWNsZSwgY2FuUmVjeWNsZSwgc2hhbGxvd1VubW91bnQsIGlzUmVjeWNsaW5n
KSB7CisgICAgICAgIHZhciBmbGFncyA9IHZOb2RlLmZsYWdzOworICAgICAgICBpZiAoZmxhZ3Mg
JiAyOCAvKiBDb21wb25lbnQgKi8pIHsKKyAgICAgICAgICAgIHVubW91bnRDb21wb25lbnQodk5v
ZGUsIHBhcmVudERvbSwgbGlmZWN5Y2xlLCBjYW5SZWN5Y2xlLCBzaGFsbG93VW5tb3VudCwgaXNS
ZWN5Y2xpbmcpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGZsYWdzICYgMzk3MCAvKiBF
bGVtZW50ICovKSB7CisgICAgICAgICAgICB1bm1vdW50RWxlbWVudCh2Tm9kZSwgcGFyZW50RG9t
LCBsaWZlY3ljbGUsIGNhblJlY3ljbGUsIHNoYWxsb3dVbm1vdW50LCBpc1JlY3ljbGluZyk7Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoZmxhZ3MgJiAoMSAvKiBUZXh0ICovIHwgNDA5NiAv
KiBWb2lkICovKSkgeworICAgICAgICAgICAgdW5tb3VudFZvaWRPclRleHQodk5vZGUsIHBhcmVu
dERvbSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZnVuY3Rpb24gdW5tb3VudFZvaWRPclRleHQo
dk5vZGUsIHBhcmVudERvbSkgeworICAgICAgICBpZiAocGFyZW50RG9tKSB7CisgICAgICAgICAg
ICByZW1vdmVDaGlsZChwYXJlbnREb20sIHZOb2RlLmRvbSk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgZnVuY3Rpb24gdW5tb3VudENvbXBvbmVudCh2Tm9kZSwgcGFyZW50RG9tLCBsaWZlY3ljbGUs
IGNhblJlY3ljbGUsIHNoYWxsb3dVbm1vdW50LCBpc1JlY3ljbGluZykgeworICAgICAgICB2YXIg
aW5zdGFuY2UgPSB2Tm9kZS5jaGlsZHJlbjsKKyAgICAgICAgdmFyIGZsYWdzID0gdk5vZGUuZmxh
Z3M7CisgICAgICAgIHZhciBpc1N0YXRlZnVsQ29tcG9uZW50JCQxID0gZmxhZ3MgJiA0OworICAg
ICAgICB2YXIgcmVmID0gdk5vZGUucmVmOworICAgICAgICB2YXIgZG9tID0gdk5vZGUuZG9tOwor
ICAgICAgICBpZiAoIWlzUmVjeWNsaW5nKSB7CisgICAgICAgICAgICBpZiAoIXNoYWxsb3dVbm1v
dW50KSB7CisgICAgICAgICAgICAgICAgaWYgKGlzU3RhdGVmdWxDb21wb25lbnQkJDEpIHsKKyAg
ICAgICAgICAgICAgICAgICAgdmFyIHN1YkxpZmVjeWNsZSA9IGluc3RhbmNlLl9saWZlY3ljbGU7
CisgICAgICAgICAgICAgICAgICAgIGlmICghc3ViTGlmZWN5Y2xlLmZhc3RVbm1vdW50KSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB1bm1vdW50KGluc3RhbmNlLl9sYXN0SW5wdXQsIG51bGws
IGxpZmVjeWNsZSwgZmFsc2UsIHNoYWxsb3dVbm1vdW50LCBpc1JlY3ljbGluZyk7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgIGlmICghbGlmZWN5Y2xlLmZhc3RVbm1vdW50KSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICB1bm1vdW50KGluc3RhbmNlLCBudWxsLCBsaWZlY3ljbGUsIGZh
bHNlLCBzaGFsbG93VW5tb3VudCwgaXNSZWN5Y2xpbmcpOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGlzU3Rh
dGVmdWxDb21wb25lbnQkJDEpIHsKKyAgICAgICAgICAgICAgICBpbnN0YW5jZS5faWdub3JlU2V0
U3RhdGUgPSB0cnVlOworICAgICAgICAgICAgICAgIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVbm1v
dW50KCk7CisgICAgICAgICAgICAgICAgaWYgKHJlZiAmJiAhaXNSZWN5Y2xpbmcpIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmVmKG51bGwpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBpbnN0YW5jZS5fdW5tb3VudGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBmaW5kRE9N
Tm9kZUVuYWJsZWQgJiYgY29tcG9uZW50VG9ET01Ob2RlTWFwLmRlbGV0ZShpbnN0YW5jZSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICghaXNOdWxsT3JVbmRlZihyZWYpKSB7
CisgICAgICAgICAgICAgICAgaWYgKCFpc051bGxPclVuZGVmKHJlZi5vbkNvbXBvbmVudFdpbGxV
bm1vdW50KSkgeworICAgICAgICAgICAgICAgICAgICByZWYub25Db21wb25lbnRXaWxsVW5tb3Vu
dChkb20pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICBpZiAocGFyZW50RG9tKSB7CisgICAgICAgICAgICB2YXIgbGFzdElucHV0ID0gaW5zdGFu
Y2UuX2xhc3RJbnB1dDsKKyAgICAgICAgICAgIGlmIChpc051bGxPclVuZGVmKGxhc3RJbnB1dCkp
IHsKKyAgICAgICAgICAgICAgICBsYXN0SW5wdXQgPSBpbnN0YW5jZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHJlbW92ZUNoaWxkKHBhcmVudERvbSwgZG9tKTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAocmVjeWNsaW5nRW5hYmxlZCAmJiAhaXNTdGF0ZWZ1bENvbXBvbmVudCQkMSAmJiAo
cGFyZW50RG9tIHx8IGNhblJlY3ljbGUpKSB7CisgICAgICAgICAgICBwb29sQ29tcG9uZW50KHZO
b2RlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBmdW5jdGlvbiB1bm1vdW50RWxlbWVudCh2Tm9k
ZSwgcGFyZW50RG9tLCBsaWZlY3ljbGUsIGNhblJlY3ljbGUsIHNoYWxsb3dVbm1vdW50LCBpc1Jl
Y3ljbGluZykgeworICAgICAgICB2YXIgZG9tID0gdk5vZGUuZG9tOworICAgICAgICB2YXIgcmVm
ID0gdk5vZGUucmVmOworICAgICAgICB2YXIgZXZlbnRzID0gdk5vZGUuZXZlbnRzOworICAgICAg
ICBpZiAoIXNoYWxsb3dVbm1vdW50ICYmICFsaWZlY3ljbGUuZmFzdFVubW91bnQpIHsKKyAgICAg
ICAgICAgIGlmIChyZWYgJiYgIWlzUmVjeWNsaW5nKSB7CisgICAgICAgICAgICAgICAgdW5tb3Vu
dFJlZihyZWYpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIGNoaWxkcmVuID0gdk5v
ZGUuY2hpbGRyZW47CisgICAgICAgICAgICBpZiAoIWlzTnVsbE9yVW5kZWYoY2hpbGRyZW4pKSB7
CisgICAgICAgICAgICAgICAgdW5tb3VudENoaWxkcmVuJDEoY2hpbGRyZW4sIGxpZmVjeWNsZSwg
c2hhbGxvd1VubW91bnQsIGlzUmVjeWNsaW5nKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICBpZiAoIWlzTnVsbChldmVudHMpKSB7CisgICAgICAgICAgICBmb3IgKHZhciBuYW1l
IGluIGV2ZW50cykgeworICAgICAgICAgICAgICAgIC8vIGRvIG5vdCBhZGQgYSBoYXNPd25Qcm9w
ZXJ0eSBjaGVjayBoZXJlLCBpdCBhZmZlY3RzIHBlcmZvcm1hbmNlCisgICAgICAgICAgICAgICAg
cGF0Y2hFdmVudChuYW1lLCBldmVudHNbbmFtZV0sIG51bGwsIGRvbSwgbGlmZWN5Y2xlKTsKKyAg
ICAgICAgICAgICAgICBldmVudHNbbmFtZV0gPSBudWxsOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIGlmIChwYXJlbnREb20pIHsKKyAgICAgICAgICAgIHJlbW92ZUNoaWxkKHBh
cmVudERvbSwgZG9tKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmVjeWNsaW5nRW5hYmxlZCAm
JiAocGFyZW50RG9tIHx8IGNhblJlY3ljbGUpKSB7CisgICAgICAgICAgICBwb29sRWxlbWVudCh2
Tm9kZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZnVuY3Rpb24gdW5tb3VudENoaWxkcmVuJDEo
Y2hpbGRyZW4sIGxpZmVjeWNsZSwgc2hhbGxvd1VubW91bnQsIGlzUmVjeWNsaW5nKSB7CisgICAg
ICAgIGlmIChpc0FycmF5KGNoaWxkcmVuKSkgeworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIHZhciBjaGlsZCA9
IGNoaWxkcmVuW2ldOworICAgICAgICAgICAgICAgIGlmICghaXNJbnZhbGlkKGNoaWxkKSAmJiBp
c09iamVjdChjaGlsZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgdW5tb3VudChjaGlsZCwgbnVs
bCwgbGlmZWN5Y2xlLCBmYWxzZSwgc2hhbGxvd1VubW91bnQsIGlzUmVjeWNsaW5nKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAo
aXNPYmplY3QoY2hpbGRyZW4pKSB7CisgICAgICAgICAgICB1bm1vdW50KGNoaWxkcmVuLCBudWxs
LCBsaWZlY3ljbGUsIGZhbHNlLCBzaGFsbG93VW5tb3VudCwgaXNSZWN5Y2xpbmcpOworICAgICAg
ICB9CisgICAgfQorICAgIGZ1bmN0aW9uIHVubW91bnRSZWYocmVmKSB7CisgICAgICAgIGlmIChp
c0Z1bmN0aW9uKHJlZikpIHsKKyAgICAgICAgICAgIHJlZihudWxsKTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmIChpc0ludmFsaWQocmVmKSkgeworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChmYWxzZSkgewor
ICAgICAgICAgICAgICAgIHRocm93RXJyb3IoJ3N0cmluZyAicmVmcyIgYXJlIG5vdCBzdXBwb3J0
ZWQgaW4gSW5mZXJubyAxLjAuIFVzZSBjYWxsYmFjayAicmVmcyIgaW5zdGVhZC4nKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHRocm93RXJyb3IoKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGZ1bmN0aW9uIHBhdGNoKGxhc3RWTm9kZSwgbmV4dFZOb2RlLCBwYXJlbnREb20sIGxpZmVj
eWNsZSwgY29udGV4dCwgaXNTVkcsIGlzUmVjeWNsaW5nKSB7CisgICAgICAgIGlmIChsYXN0Vk5v
ZGUgIT09IG5leHRWTm9kZSkgeworICAgICAgICAgICAgdmFyIGxhc3RGbGFncyA9IGxhc3RWTm9k
ZS5mbGFnczsKKyAgICAgICAgICAgIHZhciBuZXh0RmxhZ3MgPSBuZXh0Vk5vZGUuZmxhZ3M7Cisg
ICAgICAgICAgICBpZiAobmV4dEZsYWdzICYgMjggLyogQ29tcG9uZW50ICovKSB7CisgICAgICAg
ICAgICAgICAgaWYgKGxhc3RGbGFncyAmIDI4IC8qIENvbXBvbmVudCAqLykgeworICAgICAgICAg
ICAgICAgICAgICBwYXRjaENvbXBvbmVudChsYXN0Vk5vZGUsIG5leHRWTm9kZSwgcGFyZW50RG9t
LCBsaWZlY3ljbGUsIGNvbnRleHQsIGlzU1ZHLCBuZXh0RmxhZ3MgJiA0IC8qIENvbXBvbmVudENs
YXNzICovLCBpc1JlY3ljbGluZyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICByZXBsYWNlVk5vZGUocGFyZW50RG9tLCBtb3Vu
dENvbXBvbmVudChuZXh0Vk5vZGUsIG51bGwsIGxpZmVjeWNsZSwgY29udGV4dCwgaXNTVkcsIG5l
eHRGbGFncyAmIDQgLyogQ29tcG9uZW50Q2xhc3MgKi8pLCBsYXN0Vk5vZGUsIGxpZmVjeWNsZSwg
aXNSZWN5Y2xpbmcpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGVsc2UgaWYgKG5leHRGbGFncyAmIDM5NzAgLyogRWxlbWVudCAqLykgeworICAgICAgICAg
ICAgICAgIGlmIChsYXN0RmxhZ3MgJiAzOTcwIC8qIEVsZW1lbnQgKi8pIHsKKyAgICAgICAgICAg
ICAgICAgICAgcGF0Y2hFbGVtZW50KGxhc3RWTm9kZSwgbmV4dFZOb2RlLCBwYXJlbnREb20sIGxp
ZmVjeWNsZSwgY29udGV4dCwgaXNTVkcsIGlzUmVjeWNsaW5nKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VWTm9k
ZShwYXJlbnREb20sIG1vdW50RWxlbWVudChuZXh0Vk5vZGUsIG51bGwsIGxpZmVjeWNsZSwgY29u
dGV4dCwgaXNTVkcpLCBsYXN0Vk5vZGUsIGxpZmVjeWNsZSwgaXNSZWN5Y2xpbmcpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKG5leHRGbGFn
cyAmIDEgLyogVGV4dCAqLykgeworICAgICAgICAgICAgICAgIGlmIChsYXN0RmxhZ3MgJiAxIC8q
IFRleHQgKi8pIHsKKyAgICAgICAgICAgICAgICAgICAgcGF0Y2hUZXh0KGxhc3RWTm9kZSwgbmV4
dFZOb2RlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgIHJlcGxhY2VWTm9kZShwYXJlbnREb20sIG1vdW50VGV4dChuZXh0Vk5v
ZGUsIG51bGwpLCBsYXN0Vk5vZGUsIGxpZmVjeWNsZSwgaXNSZWN5Y2xpbmcpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKG5leHRGbGFncyAm
IDQwOTYgLyogVm9pZCAqLykgeworICAgICAgICAgICAgICAgIGlmIChsYXN0RmxhZ3MgJiA0MDk2
IC8qIFZvaWQgKi8pIHsKKyAgICAgICAgICAgICAgICAgICAgcGF0Y2hWb2lkKGxhc3RWTm9kZSwg
bmV4dFZOb2RlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgIHJlcGxhY2VWTm9kZShwYXJlbnREb20sIG1vdW50Vm9pZChuZXh0
Vk5vZGUsIG51bGwpLCBsYXN0Vk5vZGUsIGxpZmVjeWNsZSwgaXNSZWN5Y2xpbmcpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgICAgIC8vIEVycm9yIGNhc2U6IG1vdW50IG5ldyBvbmUgcmVwbGFjaW5nIG9sZCBvbmUKKyAg
ICAgICAgICAgICAgICByZXBsYWNlTGFzdENoaWxkQW5kVW5tb3VudChsYXN0Vk5vZGUsIG5leHRW
Tm9kZSwgcGFyZW50RG9tLCBsaWZlY3ljbGUsIGNvbnRleHQsIGlzU1ZHLCBpc1JlY3ljbGluZyk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZnVuY3Rpb24gdW5tb3VudENo
aWxkcmVuKGNoaWxkcmVuLCBkb20sIGxpZmVjeWNsZSwgaXNSZWN5Y2xpbmcpIHsKKyAgICAgICAg
aWYgKGlzVk5vZGUoY2hpbGRyZW4pKSB7CisgICAgICAgICAgICB1bm1vdW50KGNoaWxkcmVuLCBk
b20sIGxpZmVjeWNsZSwgdHJ1ZSwgZmFsc2UsIGlzUmVjeWNsaW5nKTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlIGlmIChpc0FycmF5KGNoaWxkcmVuKSkgeworICAgICAgICAgICAgcmVtb3ZlQWxs
Q2hpbGRyZW4oZG9tLCBjaGlsZHJlbiwgbGlmZWN5Y2xlLCBmYWxzZSwgaXNSZWN5Y2xpbmcpOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZG9tLnRleHRDb250ZW50ID0g
Jyc7CisgICAgICAgIH0KKyAgICB9CisgICAgZnVuY3Rpb24gcGF0Y2hFbGVtZW50KGxhc3RWTm9k
ZSwgbmV4dFZOb2RlLCBwYXJlbnREb20sIGxpZmVjeWNsZSwgY29udGV4dCwgaXNTVkcsIGlzUmVj
eWNsaW5nKSB7CisgICAgICAgIHZhciBuZXh0VGFnID0gbmV4dFZOb2RlLnR5cGU7CisgICAgICAg
IHZhciBsYXN0VGFnID0gbGFzdFZOb2RlLnR5cGU7CisgICAgICAgIGlmIChsYXN0VGFnICE9PSBu
ZXh0VGFnKSB7CisgICAgICAgICAgICByZXBsYWNlV2l0aE5ld05vZGUobGFzdFZOb2RlLCBuZXh0
Vk5vZGUsIHBhcmVudERvbSwgbGlmZWN5Y2xlLCBjb250ZXh0LCBpc1NWRywgaXNSZWN5Y2xpbmcp
OworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdmFyIGRvbSA9IGxhc3RW
Tm9kZS5kb207CisgICAgICAgICAgICB2YXIgbGFzdFByb3BzID0gbGFzdFZOb2RlLnByb3BzOwor
ICAgICAgICAgICAgdmFyIG5leHRQcm9wcyA9IG5leHRWTm9kZS5wcm9wczsKKyAgICAgICAgICAg
IHZhciBsYXN0Q2hpbGRyZW4gPSBsYXN0Vk5vZGUuY2hpbGRyZW47CisgICAgICAgICAgICB2YXIg
bmV4dENoaWxkcmVuID0gbmV4dFZOb2RlLmNoaWxkcmVuOworICAgICAgICAgICAgdmFyIGxhc3RG
bGFncyA9IGxhc3RWTm9kZS5mbGFnczsKKyAgICAgICAgICAgIHZhciBuZXh0RmxhZ3MgPSBuZXh0
Vk5vZGUuZmxhZ3M7CisgICAgICAgICAgICB2YXIgbGFzdFJlZiA9IGxhc3RWTm9kZS5yZWY7Cisg
ICAgICAgICAgICB2YXIgbmV4dFJlZiA9IG5leHRWTm9kZS5yZWY7CisgICAgICAgICAgICB2YXIg
bGFzdEV2ZW50cyA9IGxhc3RWTm9kZS5ldmVudHM7CisgICAgICAgICAgICB2YXIgbmV4dEV2ZW50
cyA9IG5leHRWTm9kZS5ldmVudHM7CisgICAgICAgICAgICBuZXh0Vk5vZGUuZG9tID0gZG9tOwor
ICAgICAgICAgICAgaWYgKGlzU1ZHIHx8IChuZXh0RmxhZ3MgJiAxMjggLyogU3ZnRWxlbWVudCAq
LykpIHsKKyAgICAgICAgICAgICAgICBpc1NWRyA9IHRydWU7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAobGFzdENoaWxkcmVuICE9PSBuZXh0Q2hpbGRyZW4pIHsKKyAgICAgICAgICAg
ICAgICBwYXRjaENoaWxkcmVuKGxhc3RGbGFncywgbmV4dEZsYWdzLCBsYXN0Q2hpbGRyZW4sIG5l
eHRDaGlsZHJlbiwgZG9tLCBsaWZlY3ljbGUsIGNvbnRleHQsIGlzU1ZHLCBpc1JlY3ljbGluZyk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIShuZXh0RmxhZ3MgJiAyIC8qIEh0bWxF
bGVtZW50ICovKSkgeworICAgICAgICAgICAgICAgIHByb2Nlc3NFbGVtZW50KG5leHRGbGFncywg
bmV4dFZOb2RlLCBkb20pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGxhc3RQcm9w
cyAhPT0gbmV4dFByb3BzKSB7CisgICAgICAgICAgICAgICAgcGF0Y2hQcm9wcyhsYXN0UHJvcHMs
IG5leHRQcm9wcywgZG9tLCBsaWZlY3ljbGUsIGNvbnRleHQsIGlzU1ZHKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmIChsYXN0RXZlbnRzICE9PSBuZXh0RXZlbnRzKSB7CisgICAgICAg
ICAgICAgICAgcGF0Y2hFdmVudHMobGFzdEV2ZW50cywgbmV4dEV2ZW50cywgZG9tLCBsaWZlY3lj
bGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG5leHRSZWYpIHsKKyAgICAgICAg
ICAgICAgICBpZiAobGFzdFJlZiAhPT0gbmV4dFJlZiB8fCBpc1JlY3ljbGluZykgeworICAgICAg
ICAgICAgICAgICAgICBtb3VudFJlZihkb20sIG5leHRSZWYsIGxpZmVjeWNsZSk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGZ1bmN0aW9u
IHBhdGNoQ2hpbGRyZW4obGFzdEZsYWdzLCBuZXh0RmxhZ3MsIGxhc3RDaGlsZHJlbiwgbmV4dENo
aWxkcmVuLCBkb20sIGxpZmVjeWNsZSwgY29udGV4dCwgaXNTVkcsIGlzUmVjeWNsaW5nKSB7Cisg
ICAgICAgIHZhciBwYXRjaEFycmF5ID0gZmFsc2U7CisgICAgICAgIHZhciBwYXRjaEtleWVkID0g
ZmFsc2U7CisgICAgICAgIGlmIChuZXh0RmxhZ3MgJiA2NCAvKiBIYXNOb25LZXllZENoaWxkcmVu
ICovKSB7CisgICAgICAgICAgICBwYXRjaEFycmF5ID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAg
ICBlbHNlIGlmICgobGFzdEZsYWdzICYgMzIgLyogSGFzS2V5ZWRDaGlsZHJlbiAqLykgJiYgKG5l
eHRGbGFncyAmIDMyIC8qIEhhc0tleWVkQ2hpbGRyZW4gKi8pKSB7CisgICAgICAgICAgICBwYXRj
aEtleWVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHBhdGNoQXJyYXkgPSB0cnVlOworICAgICAgICB9
CisgICAgICAgIGVsc2UgaWYgKGlzSW52YWxpZChuZXh0Q2hpbGRyZW4pKSB7CisgICAgICAgICAg
ICB1bm1vdW50Q2hpbGRyZW4obGFzdENoaWxkcmVuLCBkb20sIGxpZmVjeWNsZSwgaXNSZWN5Y2xp
bmcpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGlzSW52YWxpZChsYXN0Q2hpbGRyZW4p
KSB7CisgICAgICAgICAgICBpZiAoaXNTdHJpbmdPck51bWJlcihuZXh0Q2hpbGRyZW4pKSB7Cisg
ICAgICAgICAgICAgICAgc2V0VGV4dENvbnRlbnQoZG9tLCBuZXh0Q2hpbGRyZW4pOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGlzQXJyYXko
bmV4dENoaWxkcmVuKSkgeworICAgICAgICAgICAgICAgICAgICBtb3VudEFycmF5Q2hpbGRyZW4o
bmV4dENoaWxkcmVuLCBkb20sIGxpZmVjeWNsZSwgY29udGV4dCwgaXNTVkcpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbW91
bnQobmV4dENoaWxkcmVuLCBkb20sIGxpZmVjeWNsZSwgY29udGV4dCwgaXNTVkcpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChp
c1N0cmluZ09yTnVtYmVyKG5leHRDaGlsZHJlbikpIHsKKyAgICAgICAgICAgIGlmIChpc1N0cmlu
Z09yTnVtYmVyKGxhc3RDaGlsZHJlbikpIHsKKyAgICAgICAgICAgICAgICB1cGRhdGVUZXh0Q29u
dGVudChkb20sIG5leHRDaGlsZHJlbik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICB1bm1vdW50Q2hpbGRyZW4obGFzdENoaWxkcmVuLCBkb20sIGxp
ZmVjeWNsZSwgaXNSZWN5Y2xpbmcpOworICAgICAgICAgICAgICAgIHNldFRleHRDb250ZW50KGRv
bSwgbmV4dENoaWxkcmVuKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNl
IGlmIChpc0FycmF5KG5leHRDaGlsZHJlbikpIHsKKyAgICAgICAgICAgIGlmIChpc0FycmF5KGxh
c3RDaGlsZHJlbikpIHsKKyAgICAgICAgICAgICAgICBwYXRjaEFycmF5ID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICBpZiAoaXNLZXllZChsYXN0Q2hpbGRyZW4sIG5leHRDaGlsZHJlbikpIHsKKyAg
ICAgICAgICAgICAgICAgICAgcGF0Y2hLZXllZCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdW5tb3Vu
dENoaWxkcmVuKGxhc3RDaGlsZHJlbiwgZG9tLCBsaWZlY3ljbGUsIGlzUmVjeWNsaW5nKTsKKyAg
ICAgICAgICAgICAgICBtb3VudEFycmF5Q2hpbGRyZW4obmV4dENoaWxkcmVuLCBkb20sIGxpZmVj
eWNsZSwgY29udGV4dCwgaXNTVkcpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IGVsc2UgaWYgKGlzQXJyYXkobGFzdENoaWxkcmVuKSkgeworICAgICAgICAgICAgcmVtb3ZlQWxs
Q2hpbGRyZW4oZG9tLCBsYXN0Q2hpbGRyZW4sIGxpZmVjeWNsZSwgZmFsc2UsIGlzUmVjeWNsaW5n
KTsKKyAgICAgICAgICAgIG1vdW50KG5leHRDaGlsZHJlbiwgZG9tLCBsaWZlY3ljbGUsIGNvbnRl
eHQsIGlzU1ZHKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChpc1ZOb2RlKG5leHRDaGls
ZHJlbikpIHsKKyAgICAgICAgICAgIGlmIChpc1ZOb2RlKGxhc3RDaGlsZHJlbikpIHsKKyAgICAg
ICAgICAgICAgICBwYXRjaChsYXN0Q2hpbGRyZW4sIG5leHRDaGlsZHJlbiwgZG9tLCBsaWZlY3lj
bGUsIGNvbnRleHQsIGlzU1ZHLCBpc1JlY3ljbGluZyk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB1bm1vdW50Q2hpbGRyZW4obGFzdENoaWxkcmVu
LCBkb20sIGxpZmVjeWNsZSwgaXNSZWN5Y2xpbmcpOworICAgICAgICAgICAgICAgIG1vdW50KG5l
eHRDaGlsZHJlbiwgZG9tLCBsaWZlY3ljbGUsIGNvbnRleHQsIGlzU1ZHKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChpc1ZOb2RlKGxhc3RDaGlsZHJlbikpIHsK
KyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgfQorICAgICAgICBpZiAocGF0Y2hB
cnJheSkgeworICAgICAgICAgICAgaWYgKHBhdGNoS2V5ZWQpIHsKKyAgICAgICAgICAgICAgICBw
YXRjaEtleWVkQ2hpbGRyZW4obGFzdENoaWxkcmVuLCBuZXh0Q2hpbGRyZW4sIGRvbSwgbGlmZWN5
Y2xlLCBjb250ZXh0LCBpc1NWRywgaXNSZWN5Y2xpbmcpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgcGF0Y2hOb25LZXllZENoaWxkcmVuKGxhc3RD
aGlsZHJlbiwgbmV4dENoaWxkcmVuLCBkb20sIGxpZmVjeWNsZSwgY29udGV4dCwgaXNTVkcsIGlz
UmVjeWNsaW5nKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBmdW5jdGlv
biBwYXRjaENvbXBvbmVudChsYXN0Vk5vZGUsIG5leHRWTm9kZSwgcGFyZW50RG9tLCBsaWZlY3lj
bGUsIGNvbnRleHQsIGlzU1ZHLCBpc0NsYXNzLCBpc1JlY3ljbGluZykgeworICAgICAgICB2YXIg
bGFzdFR5cGUgPSBsYXN0Vk5vZGUudHlwZTsKKyAgICAgICAgdmFyIG5leHRUeXBlID0gbmV4dFZO
b2RlLnR5cGU7CisgICAgICAgIHZhciBuZXh0UHJvcHMgPSBuZXh0Vk5vZGUucHJvcHMgfHwgRU1Q
VFlfT0JKOworICAgICAgICB2YXIgbGFzdEtleSA9IGxhc3RWTm9kZS5rZXk7CisgICAgICAgIHZh
ciBuZXh0S2V5ID0gbmV4dFZOb2RlLmtleTsKKyAgICAgICAgaWYgKGxhc3RUeXBlICE9PSBuZXh0
VHlwZSkgeworICAgICAgICAgICAgaWYgKGlzQ2xhc3MpIHsKKyAgICAgICAgICAgICAgICByZXBs
YWNlV2l0aE5ld05vZGUobGFzdFZOb2RlLCBuZXh0Vk5vZGUsIHBhcmVudERvbSwgbGlmZWN5Y2xl
LCBjb250ZXh0LCBpc1NWRywgaXNSZWN5Y2xpbmcpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdmFyIGxhc3RJbnB1dCA9IGxhc3RWTm9kZS5jaGls
ZHJlbi5fbGFzdElucHV0IHx8IGxhc3RWTm9kZS5jaGlsZHJlbjsKKyAgICAgICAgICAgICAgICB2
YXIgbmV4dElucHV0ID0gY3JlYXRlU3RhdGVsZXNzQ29tcG9uZW50SW5wdXQobmV4dFZOb2RlLCBu
ZXh0VHlwZSwgbmV4dFByb3BzLCBjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBwYXRjaChsYXN0
SW5wdXQsIG5leHRJbnB1dCwgcGFyZW50RG9tLCBsaWZlY3ljbGUsIGNvbnRleHQsIGlzU1ZHLCBp
c1JlY3ljbGluZyk7CisgICAgICAgICAgICAgICAgdmFyIGRvbSA9IG5leHRWTm9kZS5kb20gPSBu
ZXh0SW5wdXQuZG9tOworICAgICAgICAgICAgICAgIG5leHRWTm9kZS5jaGlsZHJlbiA9IG5leHRJ
bnB1dDsKKyAgICAgICAgICAgICAgICBtb3VudFN0YXRlbGVzc0NvbXBvbmVudENhbGxiYWNrcyhu
ZXh0Vk5vZGUucmVmLCBkb20sIGxpZmVjeWNsZSk7CisgICAgICAgICAgICAgICAgdW5tb3VudChs
YXN0Vk5vZGUsIG51bGwsIGxpZmVjeWNsZSwgZmFsc2UsIHRydWUsIGlzUmVjeWNsaW5nKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmIChp
c0NsYXNzKSB7CisgICAgICAgICAgICAgICAgaWYgKGxhc3RLZXkgIT09IG5leHRLZXkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdOb2RlKGxhc3RWTm9kZSwgbmV4dFZOb2Rl
LCBwYXJlbnREb20sIGxpZmVjeWNsZSwgY29udGV4dCwgaXNTVkcsIGlzUmVjeWNsaW5nKTsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB2YXIgaW5zdGFuY2UgPSBsYXN0Vk5vZGUuY2hpbGRyZW47CisgICAgICAgICAg
ICAgICAgaWYgKGluc3RhbmNlLl91bm1vdW50ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGlzTnVsbChwYXJlbnREb20pKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXBsYWNlQ2hp
bGQocGFyZW50RG9tLCBtb3VudENvbXBvbmVudChuZXh0Vk5vZGUsIG51bGwsIGxpZmVjeWNsZSwg
Y29udGV4dCwgaXNTVkcsIG5leHRWTm9kZS5mbGFncyAmIDQgLyogQ29tcG9uZW50Q2xhc3MgKi8p
LCBsYXN0Vk5vZGUuZG9tKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBkZWZhdWx0UHJvcHMgPSBuZXh0VHlwZS5kZWZh
dWx0UHJvcHM7CisgICAgICAgICAgICAgICAgICAgIHZhciBsYXN0UHJvcHMgPSBpbnN0YW5jZS5w
cm9wczsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGluc3RhbmNlLl9kZXZUb29sc1N0YXR1cy5j
b25uZWN0ZWQgJiYgIWluc3RhbmNlLl9kZXZUb29sc0lkKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBjb21wb25lbnRJZE1hcC5zZXQoaW5zdGFuY2UuX2RldlRvb2xzSWQgPSBnZXRJbmNyZW1l
bnRhbElkKCksIGluc3RhbmNlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICBsaWZlY3ljbGUuZmFzdFVubW91bnQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCFpc1VuZGVmaW5lZChkZWZhdWx0UHJvcHMpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBjb3B5UHJvcHNUbyhsYXN0UHJvcHMsIG5leHRQcm9wcyk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBuZXh0Vk5vZGUucHJvcHMgPSBuZXh0UHJvcHM7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgdmFyIGxhc3RTdGF0ZSA9IGluc3RhbmNlLnN0YXRlOwor
ICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dFN0YXRlID0gaW5zdGFuY2Uuc3RhdGU7CisgICAg
ICAgICAgICAgICAgICAgIHZhciBjaGlsZENvbnRleHQgPSBpbnN0YW5jZS5nZXRDaGlsZENvbnRl
eHQoKTsKKyAgICAgICAgICAgICAgICAgICAgbmV4dFZOb2RlLmNoaWxkcmVuID0gaW5zdGFuY2U7
CisgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLl9pc1NWRyA9IGlzU1ZHOworICAgICAgICAg
ICAgICAgICAgICBpZiAoIWlzTnVsbE9yVW5kZWYoY2hpbGRDb250ZXh0KSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgY2hpbGRDb250ZXh0ID0gT2JqZWN0LmFzc2lnbih7fSwgY29udGV4dCwg
Y2hpbGRDb250ZXh0KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkQ29udGV4dCA9IGNvbnRleHQ7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgdmFyIGxhc3RJbnB1
dCQxID0gaW5zdGFuY2UuX2xhc3RJbnB1dDsKKyAgICAgICAgICAgICAgICAgICAgdmFyIG5leHRJ
bnB1dCQxID0gaW5zdGFuY2UuX3VwZGF0ZUNvbXBvbmVudChsYXN0U3RhdGUsIG5leHRTdGF0ZSwg
bGFzdFByb3BzLCBuZXh0UHJvcHMsIGNvbnRleHQsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAg
ICAgdmFyIGRpZFVwZGF0ZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLl9j
aGlsZENvbnRleHQgPSBjaGlsZENvbnRleHQ7CisgICAgICAgICAgICAgICAgICAgIGlmIChpc0lu
dmFsaWQobmV4dElucHV0JDEpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBuZXh0SW5wdXQk
MSA9IGNyZWF0ZVZvaWRWTm9kZSgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKGlzQXJyYXkobmV4dElucHV0JDEpKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoZmFsc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJv
d0Vycm9yKCdhIHZhbGlkIEluZmVybm8gVk5vZGUgKG9yIG51bGwpIG11c3QgYmUgcmV0dXJuZWQg
ZnJvbSBhIGNvbXBvbmVudCByZW5kZXIuIFlvdSBtYXkgaGF2ZSByZXR1cm5lZCBhbiBhcnJheSBv
ciBhbiBpbnZhbGlkIG9iamVjdC4nKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3IoKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChuZXh0SW5wdXQkMSA9PT0gTk9fT1ApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG5leHRJbnB1dCQxID0gbGFzdElucHV0JDE7CisgICAgICAg
ICAgICAgICAgICAgICAgICBkaWRVcGRhdGUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChpc09iamVjdChuZXh0SW5wdXQkMSkgJiYg
bmV4dElucHV0JDEuZG9tKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBuZXh0SW5wdXQkMSA9
IGNsb25lVk5vZGUobmV4dElucHV0JDEpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIGlmIChuZXh0SW5wdXQkMS5mbGFncyAmIDI4IC8qIENvbXBvbmVudCAqLykg
eworICAgICAgICAgICAgICAgICAgICAgICAgbmV4dElucHV0JDEucGFyZW50Vk5vZGUgPSBuZXh0
Vk5vZGU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBp
ZiAobGFzdElucHV0JDEuZmxhZ3MgJiAyOCAvKiBDb21wb25lbnQgKi8pIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGxhc3RJbnB1dCQxLnBhcmVudFZOb2RlID0gbmV4dFZOb2RlOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLl9sYXN0SW5wdXQg
PSBuZXh0SW5wdXQkMTsKKyAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UuX3ZOb2RlID0gbmV4
dFZOb2RlOworICAgICAgICAgICAgICAgICAgICBpZiAoZGlkVXBkYXRlKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICB2YXIgZmFzdFVubW91bnQgPSBsaWZlY3ljbGUuZmFzdFVubW91bnQ7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3ViTGlmZWN5Y2xlID0gaW5zdGFuY2UuX2xpZmVj
eWNsZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpZmVjeWNsZS5mYXN0VW5tb3VudCA9IHN1
YkxpZmVjeWNsZS5mYXN0VW5tb3VudDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhdGNoKGxh
c3RJbnB1dCQxLCBuZXh0SW5wdXQkMSwgcGFyZW50RG9tLCBsaWZlY3ljbGUsIGNoaWxkQ29udGV4
dCwgaXNTVkcsIGlzUmVjeWNsaW5nKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1YkxpZmVj
eWNsZS5mYXN0VW5tb3VudCA9IGxpZmVjeWNsZS51bm1vdW50OworICAgICAgICAgICAgICAgICAg
ICAgICAgbGlmZWN5Y2xlLmZhc3RVbm1vdW50ID0gZmFzdFVubW91bnQ7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpbnN0YW5jZS5jb21wb25lbnREaWRVcGRhdGUobGFzdFByb3BzLCBsYXN0U3Rh
dGUpOworICAgICAgICAgICAgICAgICAgICAgICAgZmluZERPTU5vZGVFbmFibGVkICYmIGNvbXBv
bmVudFRvRE9NTm9kZU1hcC5zZXQoaW5zdGFuY2UsIG5leHRJbnB1dCQxLmRvbSk7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbmV4dFZOb2RlLmRvbSA9IG5leHRJ
bnB1dCQxLmRvbTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YXIgc2hvdWxkVXBkYXRlID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICB2YXIgbGFzdFByb3BzJDEgPSBsYXN0Vk5vZGUucHJvcHM7CisgICAgICAgICAg
ICAgICAgdmFyIG5leHRIb29rcyA9IG5leHRWTm9kZS5yZWY7CisgICAgICAgICAgICAgICAgdmFy
IG5leHRIb29rc0RlZmluZWQgPSAhaXNOdWxsT3JVbmRlZihuZXh0SG9va3MpOworICAgICAgICAg
ICAgICAgIHZhciBsYXN0SW5wdXQkMiA9IGxhc3RWTm9kZS5jaGlsZHJlbjsKKyAgICAgICAgICAg
ICAgICB2YXIgbmV4dElucHV0JDIgPSBsYXN0SW5wdXQkMjsKKyAgICAgICAgICAgICAgICBuZXh0
Vk5vZGUuZG9tID0gbGFzdFZOb2RlLmRvbTsKKyAgICAgICAgICAgICAgICBuZXh0Vk5vZGUuY2hp
bGRyZW4gPSBsYXN0SW5wdXQkMjsKKyAgICAgICAgICAgICAgICBpZiAobGFzdEtleSAhPT0gbmV4
dEtleSkgeworICAgICAgICAgICAgICAgICAgICBzaG91bGRVcGRhdGUgPSB0cnVlOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKG5leHRIb29rc0RlZmluZWQgJiYgIWlzTnVsbE9yVW5kZWYobmV4dEhvb2tzLm9uQ29tcG9u
ZW50U2hvdWxkVXBkYXRlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkVXBkYXRl
ID0gbmV4dEhvb2tzLm9uQ29tcG9uZW50U2hvdWxkVXBkYXRlKGxhc3RQcm9wcyQxLCBuZXh0UHJv
cHMpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGlmIChzaG91bGRVcGRhdGUgIT09IGZhbHNlKSB7CisgICAgICAgICAgICAgICAgICAg
IGlmIChuZXh0SG9va3NEZWZpbmVkICYmICFpc051bGxPclVuZGVmKG5leHRIb29rcy5vbkNvbXBv
bmVudFdpbGxVcGRhdGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsaWZlY3ljbGUuZmFz
dFVubW91bnQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5leHRIb29rcy5vbkNv
bXBvbmVudFdpbGxVcGRhdGUobGFzdFByb3BzJDEsIG5leHRQcm9wcyk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbmV4dElucHV0JDIgPSBuZXh0VHlwZShuZXh0
UHJvcHMsIGNvbnRleHQpOworICAgICAgICAgICAgICAgICAgICBpZiAoaXNJbnZhbGlkKG5leHRJ
bnB1dCQyKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbmV4dElucHV0JDIgPSBjcmVhdGVW
b2lkVk5vZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBl
bHNlIGlmIChpc0FycmF5KG5leHRJbnB1dCQyKSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGZhbHNlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcignYSB2
YWxpZCBJbmZlcm5vIFZOb2RlIChvciBudWxsKSBtdXN0IGJlIHJldHVybmVkIGZyb20gYSBjb21w
b25lbnQgcmVuZGVyLiBZb3UgbWF5IGhhdmUgcmV0dXJuZWQgYW4gYXJyYXkgb3IgYW4gaW52YWxp
ZCBvYmplY3QuJyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICB0aHJvd0Vycm9yKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgZWxzZSBpZiAoaXNPYmplY3QobmV4dElucHV0JDIpICYmIG5leHRJbnB1dCQyLmRv
bSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbmV4dElucHV0JDIgPSBjbG9uZVZOb2RlKG5l
eHRJbnB1dCQyKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBp
ZiAobmV4dElucHV0JDIgIT09IE5PX09QKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwYXRj
aChsYXN0SW5wdXQkMiwgbmV4dElucHV0JDIsIHBhcmVudERvbSwgbGlmZWN5Y2xlLCBjb250ZXh0
LCBpc1NWRywgaXNSZWN5Y2xpbmcpOworICAgICAgICAgICAgICAgICAgICAgICAgbmV4dFZOb2Rl
LmNoaWxkcmVuID0gbmV4dElucHV0JDI7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4
dEhvb2tzRGVmaW5lZCAmJiAhaXNOdWxsT3JVbmRlZihuZXh0SG9va3Mub25Db21wb25lbnREaWRV
cGRhdGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlmZWN5Y2xlLmZhc3RVbm1v
dW50ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dEhvb2tzLm9uQ29t
cG9uZW50RGlkVXBkYXRlKGxhc3RQcm9wcyQxLCBuZXh0UHJvcHMpOworICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgbmV4dFZOb2RlLmRvbSA9IG5leHRJ
bnB1dCQyLmRvbTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBpZiAobmV4dElucHV0JDIuZmxhZ3MgJiAyOCAvKiBDb21wb25lbnQgKi8p
IHsKKyAgICAgICAgICAgICAgICAgICAgbmV4dElucHV0JDIucGFyZW50Vk5vZGUgPSBuZXh0Vk5v
ZGU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKGxhc3RJbnB1
dCQyLmZsYWdzICYgMjggLyogQ29tcG9uZW50ICovKSB7CisgICAgICAgICAgICAgICAgICAgIGxh
c3RJbnB1dCQyLnBhcmVudFZOb2RlID0gbmV4dFZOb2RlOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
IGZ1bmN0aW9uIHBhdGNoVGV4dChsYXN0Vk5vZGUsIG5leHRWTm9kZSkgeworICAgICAgICB2YXIg
bmV4dFRleHQgPSBuZXh0Vk5vZGUuY2hpbGRyZW47CisgICAgICAgIHZhciBkb20gPSBsYXN0Vk5v
ZGUuZG9tOworICAgICAgICBuZXh0Vk5vZGUuZG9tID0gZG9tOworICAgICAgICBpZiAobGFzdFZO
b2RlLmNoaWxkcmVuICE9PSBuZXh0VGV4dCkgeworICAgICAgICAgICAgZG9tLm5vZGVWYWx1ZSA9
IG5leHRUZXh0OworICAgICAgICB9CisgICAgfQorICAgIGZ1bmN0aW9uIHBhdGNoVm9pZChsYXN0
Vk5vZGUsIG5leHRWTm9kZSkgeworICAgICAgICBuZXh0Vk5vZGUuZG9tID0gbGFzdFZOb2RlLmRv
bTsKKyAgICB9CisgICAgZnVuY3Rpb24gcGF0Y2hOb25LZXllZENoaWxkcmVuKGxhc3RDaGlsZHJl
biwgbmV4dENoaWxkcmVuLCBkb20sIGxpZmVjeWNsZSwgY29udGV4dCwgaXNTVkcsIGlzUmVjeWNs
aW5nKSB7CisgICAgICAgIHZhciBsYXN0Q2hpbGRyZW5MZW5ndGggPSBsYXN0Q2hpbGRyZW4ubGVu
Z3RoOworICAgICAgICB2YXIgbmV4dENoaWxkcmVuTGVuZ3RoID0gbmV4dENoaWxkcmVuLmxlbmd0
aDsKKyAgICAgICAgdmFyIGNvbW1vbkxlbmd0aCA9IGxhc3RDaGlsZHJlbkxlbmd0aCA+IG5leHRD
aGlsZHJlbkxlbmd0aCA/IG5leHRDaGlsZHJlbkxlbmd0aCA6IGxhc3RDaGlsZHJlbkxlbmd0aDsK
KyAgICAgICAgdmFyIGk7CisgICAgICAgIHZhciBuZXh0Tm9kZSA9IG51bGw7CisgICAgICAgIHZh
ciBuZXdOb2RlOworICAgICAgICAvLyBMb29wIGJhY2t3YXJkcyBzbyB3ZSBjYW4gdXNlIGluc2Vy
dEJlZm9yZQorICAgICAgICBpZiAobGFzdENoaWxkcmVuTGVuZ3RoIDwgbmV4dENoaWxkcmVuTGVu
Z3RoKSB7CisgICAgICAgICAgICBmb3IgKGkgPSBuZXh0Q2hpbGRyZW5MZW5ndGggLSAxOyBpID49
IGNvbW1vbkxlbmd0aDsgaS0tKSB7CisgICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gbmV4dENo
aWxkcmVuW2ldOworICAgICAgICAgICAgICAgIGlmICghaXNJbnZhbGlkKGNoaWxkKSkgeworICAg
ICAgICAgICAgICAgICAgICBpZiAoY2hpbGQuZG9tKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBuZXh0Q2hpbGRyZW5baV0gPSBjaGlsZCA9IGNsb25lVk5vZGUoY2hpbGQpOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG5ld05vZGUgPSBtb3VudChjaGlsZCwg
bnVsbCwgbGlmZWN5Y2xlLCBjb250ZXh0LCBpc1NWRyk7CisgICAgICAgICAgICAgICAgICAgIGlu
c2VydE9yQXBwZW5kKGRvbSwgbmV3Tm9kZSwgbmV4dE5vZGUpOworICAgICAgICAgICAgICAgICAg
ICBuZXh0Tm9kZSA9IG5ld05vZGU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKG5leHRDaGlsZHJlbkxlbmd0aCA9PT0gMCkgewor
ICAgICAgICAgICAgcmVtb3ZlQWxsQ2hpbGRyZW4oZG9tLCBsYXN0Q2hpbGRyZW4sIGxpZmVjeWNs
ZSwgZmFsc2UsIGlzUmVjeWNsaW5nKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChsYXN0
Q2hpbGRyZW5MZW5ndGggPiBuZXh0Q2hpbGRyZW5MZW5ndGgpIHsKKyAgICAgICAgICAgIGZvciAo
aSA9IGNvbW1vbkxlbmd0aDsgaSA8IGxhc3RDaGlsZHJlbkxlbmd0aDsgaSsrKSB7CisgICAgICAg
ICAgICAgICAgdmFyIGNoaWxkJDEgPSBsYXN0Q2hpbGRyZW5baV07CisgICAgICAgICAgICAgICAg
aWYgKCFpc0ludmFsaWQoY2hpbGQkMSkpIHsKKyAgICAgICAgICAgICAgICAgICAgdW5tb3VudChs
YXN0Q2hpbGRyZW5baV0sIGRvbSwgbGlmZWN5Y2xlLCBmYWxzZSwgZmFsc2UsIGlzUmVjeWNsaW5n
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
Zm9yIChpID0gY29tbW9uTGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgICAgIHZh
ciBsYXN0Q2hpbGQgPSBsYXN0Q2hpbGRyZW5baV07CisgICAgICAgICAgICB2YXIgbmV4dENoaWxk
ID0gbmV4dENoaWxkcmVuW2ldOworICAgICAgICAgICAgaWYgKGlzSW52YWxpZChuZXh0Q2hpbGQp
KSB7CisgICAgICAgICAgICAgICAgaWYgKCFpc0ludmFsaWQobGFzdENoaWxkKSkgeworICAgICAg
ICAgICAgICAgICAgICB1bm1vdW50KGxhc3RDaGlsZCwgZG9tLCBsaWZlY3ljbGUsIHRydWUsIGZh
bHNlLCBpc1JlY3ljbGluZyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKG5leHRDaGlsZC5kb20pIHsKKyAg
ICAgICAgICAgICAgICAgICAgbmV4dENoaWxkcmVuW2ldID0gbmV4dENoaWxkID0gY2xvbmVWTm9k
ZShuZXh0Q2hpbGQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoaXNJ
bnZhbGlkKGxhc3RDaGlsZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbmV3Tm9kZSA9IG1vdW50
KG5leHRDaGlsZCwgbnVsbCwgbGlmZWN5Y2xlLCBjb250ZXh0LCBpc1NWRyk7CisgICAgICAgICAg
ICAgICAgICAgIGluc2VydE9yQXBwZW5kKGRvbSwgbmV3Tm9kZSwgbmV4dE5vZGUpOworICAgICAg
ICAgICAgICAgICAgICBuZXh0Tm9kZSA9IG5ld05vZGU7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBwYXRjaChsYXN0Q2hpbGQs
IG5leHRDaGlsZCwgZG9tLCBsaWZlY3ljbGUsIGNvbnRleHQsIGlzU1ZHLCBpc1JlY3ljbGluZyk7
CisgICAgICAgICAgICAgICAgICAgIG5leHROb2RlID0gbmV4dENoaWxkLmRvbTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZnVuY3Rpb24g
cGF0Y2hLZXllZENoaWxkcmVuKGEsIGIsIGRvbSwgbGlmZWN5Y2xlLCBjb250ZXh0LCBpc1NWRywg
aXNSZWN5Y2xpbmcpIHsKKyAgICAgICAgdmFyIGFMZW5ndGggPSBhLmxlbmd0aDsKKyAgICAgICAg
dmFyIGJMZW5ndGggPSBiLmxlbmd0aDsKKyAgICAgICAgdmFyIGFFbmQgPSBhTGVuZ3RoIC0gMTsK
KyAgICAgICAgdmFyIGJFbmQgPSBiTGVuZ3RoIC0gMTsKKyAgICAgICAgdmFyIGFTdGFydCA9IDA7
CisgICAgICAgIHZhciBiU3RhcnQgPSAwOworICAgICAgICB2YXIgaTsKKyAgICAgICAgdmFyIGo7
CisgICAgICAgIHZhciBhTm9kZTsKKyAgICAgICAgdmFyIGJOb2RlOworICAgICAgICB2YXIgbmV4
dE5vZGU7CisgICAgICAgIHZhciBuZXh0UG9zOworICAgICAgICB2YXIgbm9kZTsKKyAgICAgICAg
aWYgKGFMZW5ndGggPT09IDApIHsKKyAgICAgICAgICAgIGlmIChiTGVuZ3RoICE9PSAwKSB7Cisg
ICAgICAgICAgICAgICAgbW91bnRBcnJheUNoaWxkcmVuKGIsIGRvbSwgbGlmZWN5Y2xlLCBjb250
ZXh0LCBpc1NWRyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgZWxzZSBpZiAoYkxlbmd0aCA9PT0gMCkgeworICAgICAgICAgICAgcmVtb3Zl
QWxsQ2hpbGRyZW4oZG9tLCBhLCBsaWZlY3ljbGUsIGZhbHNlLCBpc1JlY3ljbGluZyk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdmFyIGFTdGFydE5vZGUgPSBhW2FT
dGFydF07CisgICAgICAgIHZhciBiU3RhcnROb2RlID0gYltiU3RhcnRdOworICAgICAgICB2YXIg
YUVuZE5vZGUgPSBhW2FFbmRdOworICAgICAgICB2YXIgYkVuZE5vZGUgPSBiW2JFbmRdOworICAg
ICAgICBpZiAoYlN0YXJ0Tm9kZS5kb20pIHsKKyAgICAgICAgICAgIGJbYlN0YXJ0XSA9IGJTdGFy
dE5vZGUgPSBjbG9uZVZOb2RlKGJTdGFydE5vZGUpOworICAgICAgICB9CisgICAgICAgIGlmIChi
RW5kTm9kZS5kb20pIHsKKyAgICAgICAgICAgIGJbYkVuZF0gPSBiRW5kTm9kZSA9IGNsb25lVk5v
ZGUoYkVuZE5vZGUpOworICAgICAgICB9CisgICAgICAgIC8vIFN0ZXAgMQorICAgICAgICAvKiBl
c2xpbnQgbm8tY29uc3RhbnQtY29uZGl0aW9uOiAwICovCisgICAgICAgIG91dGVyOiB3aGlsZSAo
dHJ1ZSkgeworICAgICAgICAgICAgLy8gU3luYyBub2RlcyB3aXRoIHRoZSBzYW1lIGtleSBhdCB0
aGUgYmVnaW5uaW5nLgorICAgICAgICAgICAgd2hpbGUgKGFTdGFydE5vZGUua2V5ID09PSBiU3Rh
cnROb2RlLmtleSkgeworICAgICAgICAgICAgICAgIHBhdGNoKGFTdGFydE5vZGUsIGJTdGFydE5v
ZGUsIGRvbSwgbGlmZWN5Y2xlLCBjb250ZXh0LCBpc1NWRywgaXNSZWN5Y2xpbmcpOworICAgICAg
ICAgICAgICAgIGFTdGFydCsrOworICAgICAgICAgICAgICAgIGJTdGFydCsrOworICAgICAgICAg
ICAgICAgIGlmIChhU3RhcnQgPiBhRW5kIHx8IGJTdGFydCA+IGJFbmQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWsgb3V0ZXI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGFTdGFydE5vZGUgPSBhW2FTdGFydF07CisgICAgICAgICAgICAgICAgYlN0YXJ0Tm9kZSA9IGJb
YlN0YXJ0XTsKKyAgICAgICAgICAgICAgICBpZiAoYlN0YXJ0Tm9kZS5kb20pIHsKKyAgICAgICAg
ICAgICAgICAgICAgYltiU3RhcnRdID0gYlN0YXJ0Tm9kZSA9IGNsb25lVk5vZGUoYlN0YXJ0Tm9k
ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gU3lu
YyBub2RlcyB3aXRoIHRoZSBzYW1lIGtleSBhdCB0aGUgZW5kLgorICAgICAgICAgICAgd2hpbGUg
KGFFbmROb2RlLmtleSA9PT0gYkVuZE5vZGUua2V5KSB7CisgICAgICAgICAgICAgICAgcGF0Y2go
YUVuZE5vZGUsIGJFbmROb2RlLCBkb20sIGxpZmVjeWNsZSwgY29udGV4dCwgaXNTVkcsIGlzUmVj
eWNsaW5nKTsKKyAgICAgICAgICAgICAgICBhRW5kLS07CisgICAgICAgICAgICAgICAgYkVuZC0t
OworICAgICAgICAgICAgICAgIGlmIChhU3RhcnQgPiBhRW5kIHx8IGJTdGFydCA+IGJFbmQpIHsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWsgb3V0ZXI7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGFFbmROb2RlID0gYVthRW5kXTsKKyAgICAgICAgICAgICAgICBiRW5kTm9k
ZSA9IGJbYkVuZF07CisgICAgICAgICAgICAgICAgaWYgKGJFbmROb2RlLmRvbSkgeworICAgICAg
ICAgICAgICAgICAgICBiW2JFbmRdID0gYkVuZE5vZGUgPSBjbG9uZVZOb2RlKGJFbmROb2RlKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBNb3ZlIGFu
ZCBzeW5jIG5vZGVzIGZyb20gcmlnaHQgdG8gbGVmdC4KKyAgICAgICAgICAgIGlmIChhRW5kTm9k
ZS5rZXkgPT09IGJTdGFydE5vZGUua2V5KSB7CisgICAgICAgICAgICAgICAgcGF0Y2goYUVuZE5v
ZGUsIGJTdGFydE5vZGUsIGRvbSwgbGlmZWN5Y2xlLCBjb250ZXh0LCBpc1NWRywgaXNSZWN5Y2xp
bmcpOworICAgICAgICAgICAgICAgIGluc2VydE9yQXBwZW5kKGRvbSwgYlN0YXJ0Tm9kZS5kb20s
IGFTdGFydE5vZGUuZG9tKTsKKyAgICAgICAgICAgICAgICBhRW5kLS07CisgICAgICAgICAgICAg
ICAgYlN0YXJ0Kys7CisgICAgICAgICAgICAgICAgYUVuZE5vZGUgPSBhW2FFbmRdOworICAgICAg
ICAgICAgICAgIGJTdGFydE5vZGUgPSBiW2JTdGFydF07CisgICAgICAgICAgICAgICAgaWYgKGJT
dGFydE5vZGUuZG9tKSB7CisgICAgICAgICAgICAgICAgICAgIGJbYlN0YXJ0XSA9IGJTdGFydE5v
ZGUgPSBjbG9uZVZOb2RlKGJTdGFydE5vZGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIE1vdmUgYW5k
IHN5bmMgbm9kZXMgZnJvbSBsZWZ0IHRvIHJpZ2h0LgorICAgICAgICAgICAgaWYgKGFTdGFydE5v
ZGUua2V5ID09PSBiRW5kTm9kZS5rZXkpIHsKKyAgICAgICAgICAgICAgICBwYXRjaChhU3RhcnRO
b2RlLCBiRW5kTm9kZSwgZG9tLCBsaWZlY3ljbGUsIGNvbnRleHQsIGlzU1ZHLCBpc1JlY3ljbGlu
Zyk7CisgICAgICAgICAgICAgICAgbmV4dFBvcyA9IGJFbmQgKyAxOworICAgICAgICAgICAgICAg
IG5leHROb2RlID0gbmV4dFBvcyA8IGIubGVuZ3RoID8gYltuZXh0UG9zXS5kb20gOiBudWxsOwor
ICAgICAgICAgICAgICAgIGluc2VydE9yQXBwZW5kKGRvbSwgYkVuZE5vZGUuZG9tLCBuZXh0Tm9k
ZSk7CisgICAgICAgICAgICAgICAgYVN0YXJ0Kys7CisgICAgICAgICAgICAgICAgYkVuZC0tOwor
ICAgICAgICAgICAgICAgIGFTdGFydE5vZGUgPSBhW2FTdGFydF07CisgICAgICAgICAgICAgICAg
YkVuZE5vZGUgPSBiW2JFbmRdOworICAgICAgICAgICAgICAgIGlmIChiRW5kTm9kZS5kb20pIHsK
KyAgICAgICAgICAgICAgICAgICAgYltiRW5kXSA9IGJFbmROb2RlID0gY2xvbmVWTm9kZShiRW5k
Tm9kZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGFT
dGFydCA+IGFFbmQpIHsKKyAgICAgICAgICAgIGlmIChiU3RhcnQgPD0gYkVuZCkgeworICAgICAg
ICAgICAgICAgIG5leHRQb3MgPSBiRW5kICsgMTsKKyAgICAgICAgICAgICAgICBuZXh0Tm9kZSA9
IG5leHRQb3MgPCBiLmxlbmd0aCA/IGJbbmV4dFBvc10uZG9tIDogbnVsbDsKKyAgICAgICAgICAg
ICAgICB3aGlsZSAoYlN0YXJ0IDw9IGJFbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgbm9kZSA9
IGJbYlN0YXJ0XTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUuZG9tKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBiW2JTdGFydF0gPSBub2RlID0gY2xvbmVWTm9kZShub2RlKTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBiU3RhcnQrKzsKKyAgICAg
ICAgICAgICAgICAgICAgaW5zZXJ0T3JBcHBlbmQoZG9tLCBtb3VudChub2RlLCBudWxsLCBsaWZl
Y3ljbGUsIGNvbnRleHQsIGlzU1ZHKSwgbmV4dE5vZGUpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChiU3RhcnQgPiBiRW5kKSB7
CisgICAgICAgICAgICB3aGlsZSAoYVN0YXJ0IDw9IGFFbmQpIHsKKyAgICAgICAgICAgICAgICB1
bm1vdW50KGFbYVN0YXJ0KytdLCBkb20sIGxpZmVjeWNsZSwgZmFsc2UsIGZhbHNlLCBpc1JlY3lj
bGluZyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICBhTGVuZ3RoID0gYUVuZCAtIGFTdGFydCArIDE7CisgICAgICAgICAgICBiTGVuZ3RoID0g
YkVuZCAtIGJTdGFydCArIDE7CisgICAgICAgICAgICB2YXIgYU51bGxhYmxlID0gYTsKKyAgICAg
ICAgICAgIHZhciBzb3VyY2VzID0gbmV3IEFycmF5KGJMZW5ndGgpOworICAgICAgICAgICAgLy8g
TWFyayBhbGwgbm9kZXMgYXMgaW5zZXJ0ZWQuCisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwg
Ykxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgc291cmNlc1tpXSA9IC0xOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgdmFyIG1vdmVkID0gZmFsc2U7CisgICAgICAgICAgICB2YXIg
cG9zID0gMDsKKyAgICAgICAgICAgIHZhciBwYXRjaGVkID0gMDsKKyAgICAgICAgICAgIGlmICgo
Ykxlbmd0aCA8PSA0KSB8fCAoYUxlbmd0aCAqIGJMZW5ndGggPD0gMTYpKSB7CisgICAgICAgICAg
ICAgICAgZm9yIChpID0gYVN0YXJ0OyBpIDw9IGFFbmQ7IGkrKykgeworICAgICAgICAgICAgICAg
ICAgICBhTm9kZSA9IGFbaV07CisgICAgICAgICAgICAgICAgICAgIGlmIChwYXRjaGVkIDwgYkxl
bmd0aCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gYlN0YXJ0OyBqIDw9IGJF
bmQ7IGorKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJOb2RlID0gYltqXTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYU5vZGUua2V5ID09PSBiTm9kZS5rZXkpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlc1tqIC0gYlN0YXJ0XSA9IGk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwb3MgPiBqKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZlZCA9IHRydWU7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MgPSBqOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChiTm9kZS5kb20pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJbal0gPSBiTm9kZSA9IGNsb25lVk5vZGUoYk5vZGUpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGNoKGFOb2Rl
LCBiTm9kZSwgZG9tLCBsaWZlY3ljbGUsIGNvbnRleHQsIGlzU1ZHLCBpc1JlY3ljbGluZyk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGNoZWQrKzsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYU51bGxhYmxlW2ldID0gbnVsbDsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgdmFyIGtleUluZGV4ID0gbmV3IE1hcCgpOworICAgICAgICAgICAgICAgIGZvciAoaSA9IGJT
dGFydDsgaSA8PSBiRW5kOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgbm9kZSA9IGJbaV07
CisgICAgICAgICAgICAgICAgICAgIGtleUluZGV4LnNldChub2RlLmtleSwgaSk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZvciAoaSA9IGFTdGFydDsgaSA8PSBhRW5kOyBp
KyspIHsKKyAgICAgICAgICAgICAgICAgICAgYU5vZGUgPSBhW2ldOworICAgICAgICAgICAgICAg
ICAgICBpZiAocGF0Y2hlZCA8IGJMZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGog
PSBrZXlJbmRleC5nZXQoYU5vZGUua2V5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh
aXNVbmRlZmluZWQoaikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiTm9kZSA9IGJb
al07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlc1tqIC0gYlN0YXJ0XSA9IGk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBvcyA+IGopIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbW92ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcG9zID0gajsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJOb2RlLmRvbSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBiW2pdID0gYk5vZGUgPSBjbG9uZVZOb2RlKGJOb2Rl
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcGF0Y2goYU5vZGUsIGJOb2RlLCBkb20sIGxpZmVjeWNsZSwgY29udGV4dCwgaXNTVkcs
IGlzUmVjeWNsaW5nKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRjaGVkKys7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYU51bGxhYmxlW2ldID0gbnVsbDsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChhTGVuZ3RoID09PSBhLmxlbmd0aCAm
JiBwYXRjaGVkID09PSAwKSB7CisgICAgICAgICAgICAgICAgcmVtb3ZlQWxsQ2hpbGRyZW4oZG9t
LCBhLCBsaWZlY3ljbGUsIGZhbHNlLCBpc1JlY3ljbGluZyk7CisgICAgICAgICAgICAgICAgd2hp
bGUgKGJTdGFydCA8IGJMZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAgbm9kZSA9IGJbYlN0
YXJ0XTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUuZG9tKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBiW2JTdGFydF0gPSBub2RlID0gY2xvbmVWTm9kZShub2RlKTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBiU3RhcnQrKzsKKyAgICAgICAgICAg
ICAgICAgICAgaW5zZXJ0T3JBcHBlbmQoZG9tLCBtb3VudChub2RlLCBudWxsLCBsaWZlY3ljbGUs
IGNvbnRleHQsIGlzU1ZHKSwgbnVsbCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaSA9IGFMZW5ndGggLSBwYXRj
aGVkOworICAgICAgICAgICAgICAgIHdoaWxlIChpID4gMCkgeworICAgICAgICAgICAgICAgICAg
ICBhTm9kZSA9IGFOdWxsYWJsZVthU3RhcnQrK107CisgICAgICAgICAgICAgICAgICAgIGlmICgh
aXNOdWxsKGFOb2RlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdW5tb3VudChhTm9kZSwg
ZG9tLCBsaWZlY3ljbGUsIGZhbHNlLCBmYWxzZSwgaXNSZWN5Y2xpbmcpOworICAgICAgICAgICAg
ICAgICAgICAgICAgaS0tOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGlmIChtb3ZlZCkgeworICAgICAgICAgICAgICAgICAgICB2YXIg
c2VxID0gbGlzX2FsZ29yaXRobShzb3VyY2VzKTsKKyAgICAgICAgICAgICAgICAgICAgaiA9IHNl
cS5sZW5ndGggLSAxOworICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSBiTGVuZ3RoIC0gMTsg
aSA+PSAwOyBpLS0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2VzW2ldID09
PSAtMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcyA9IGkgKyBiU3RhcnQ7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSA9IGJbcG9zXTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAobm9kZS5kb20pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYltwb3NdID0gbm9kZSA9IGNsb25lVk5vZGUobm9kZSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRQb3MgPSBwb3Mg
KyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHROb2RlID0gbmV4dFBvcyA8IGIu
bGVuZ3RoID8gYltuZXh0UG9zXS5kb20gOiBudWxsOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGluc2VydE9yQXBwZW5kKGRvbSwgbW91bnQobm9kZSwgZG9tLCBsaWZlY3ljbGUsIGNvbnRl
eHQsIGlzU1ZHKSwgbmV4dE5vZGUpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGogPCAwIHx8IGkgIT09IHNlcVtqXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwb3MgPSBpICsgYlN0YXJ0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2Rl
ID0gYltwb3NdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0UG9zID0gcG9z
ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dE5vZGUgPSBuZXh0UG9z
IDwgYi5sZW5ndGggPyBiW25leHRQb3NdLmRvbSA6IG51bGw7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGluc2VydE9yQXBwZW5kKGRvbSwgbm9kZS5kb20sIG5leHROb2RlKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGotLTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAo
cGF0Y2hlZCAhPT0gYkxlbmd0aCkgeworICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSBiTGVu
Z3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzb3Vy
Y2VzW2ldID09PSAtMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcyA9IGkgKyBi
U3RhcnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSA9IGJbcG9zXTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5kb20pIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYltwb3NdID0gbm9kZSA9IGNsb25lVk5vZGUobm9kZSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRQ
b3MgPSBwb3MgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHROb2RlID0gbmV4
dFBvcyA8IGIubGVuZ3RoID8gYltuZXh0UG9zXS5kb20gOiBudWxsOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGluc2VydE9yQXBwZW5kKGRvbSwgbW91bnQobm9kZSwgbnVsbCwgbGlmZWN5
Y2xlLCBjb250ZXh0LCBpc1NWRyksIG5leHROb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKyAgICAvLyAvLyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcv
d2lraS9Mb25nZXN0X2luY3JlYXNpbmdfc3Vic2VxdWVuY2UKKyAgICBmdW5jdGlvbiBsaXNfYWxn
b3JpdGhtKGEpIHsKKyAgICAgICAgdmFyIHAgPSBhLnNsaWNlKDApOworICAgICAgICB2YXIgcmVz
dWx0ID0gW107CisgICAgICAgIHJlc3VsdC5wdXNoKDApOworICAgICAgICB2YXIgaTsKKyAgICAg
ICAgdmFyIGo7CisgICAgICAgIHZhciB1OworICAgICAgICB2YXIgdjsKKyAgICAgICAgdmFyIGM7
CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBp
ZiAoYVtpXSA9PT0gLTEpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGogPSByZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdOworICAgICAgICAg
ICAgaWYgKGFbal0gPCBhW2ldKSB7CisgICAgICAgICAgICAgICAgcFtpXSA9IGo7CisgICAgICAg
ICAgICAgICAgcmVzdWx0LnB1c2goaSk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICB1ID0gMDsKKyAgICAgICAgICAgIHYgPSByZXN1bHQubGVu
Z3RoIC0gMTsKKyAgICAgICAgICAgIHdoaWxlICh1IDwgdikgeworICAgICAgICAgICAgICAgIGMg
PSAoKHUgKyB2KSAvIDIpIHwgMDsKKyAgICAgICAgICAgICAgICBpZiAoYVtyZXN1bHRbY11dIDwg
YVtpXSkgeworICAgICAgICAgICAgICAgICAgICB1ID0gYyArIDE7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICB2ID0gYzsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYVtpXSA8IGFb
cmVzdWx0W3VdXSkgeworICAgICAgICAgICAgICAgIGlmICh1ID4gMCkgeworICAgICAgICAgICAg
ICAgICAgICBwW2ldID0gcmVzdWx0W3UgLSAxXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgcmVzdWx0W3VdID0gaTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICB1ID0gcmVzdWx0Lmxlbmd0aDsKKyAgICAgICAgdiA9IHJlc3VsdFt1IC0gMV07CisgICAgICAg
IHdoaWxlICh1LS0gPiAwKSB7CisgICAgICAgICAgICByZXN1bHRbdV0gPSB2OworICAgICAgICAg
ICAgdiA9IHBbdl07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cisg
ICAgZnVuY3Rpb24gcGF0Y2hQcm9wKHByb3AsIGxhc3RWYWx1ZSwgbmV4dFZhbHVlLCBkb20sIGlz
U1ZHLCBsaWZlY3ljbGUpIHsKKyAgICAgICAgaWYgKHNraXBQcm9wc1twcm9wXSkgeworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmIChib29sZWFuUHJvcHNbcHJvcF0p
IHsKKyAgICAgICAgICAgIGRvbVtwcm9wXSA9IG5leHRWYWx1ZSA/IHRydWUgOiBmYWxzZTsKKyAg
ICAgICAgfQorICAgICAgICBlbHNlIGlmIChzdHJpY3RQcm9wc1twcm9wXSkgeworICAgICAgICAg
ICAgdmFyIHZhbHVlID0gaXNOdWxsT3JVbmRlZihuZXh0VmFsdWUpID8gJycgOiBuZXh0VmFsdWU7
CisgICAgICAgICAgICBpZiAoZG9tW3Byb3BdICE9PSB2YWx1ZSkgeworICAgICAgICAgICAgICAg
IGRvbVtwcm9wXSA9IHZhbHVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVs
c2UgaWYgKGlzQXR0ckFuRXZlbnQocHJvcCkpIHsKKyAgICAgICAgICAgIHBhdGNoRXZlbnQocHJv
cCwgbGFzdFZhbHVlLCBuZXh0VmFsdWUsIGRvbSwgbGlmZWN5Y2xlKTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlIGlmIChsYXN0VmFsdWUgIT09IG5leHRWYWx1ZSkgeworICAgICAgICAgICAgaWYg
KGlzTnVsbE9yVW5kZWYobmV4dFZhbHVlKSkgeworICAgICAgICAgICAgICAgIGRvbS5yZW1vdmVB
dHRyaWJ1dGUocHJvcCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChwcm9w
ID09PSAnY2xhc3NOYW1lJykgeworICAgICAgICAgICAgICAgIGlmIChpc1NWRykgeworICAgICAg
ICAgICAgICAgICAgICBkb20uc2V0QXR0cmlidXRlKCdjbGFzcycsIG5leHRWYWx1ZSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICBkb20uY2xhc3NOYW1lID0gbmV4dFZhbHVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHByb3AgPT09ICdzdHlsZScpIHsKKyAgICAgICAg
ICAgICAgICBwYXRjaFN0eWxlKGxhc3RWYWx1ZSwgbmV4dFZhbHVlLCBkb20pOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZWxzZSBpZiAocHJvcCA9PT0gJ2Rhbmdlcm91c2x5U2V0SW5uZXJI
VE1MJykgeworICAgICAgICAgICAgICAgIHZhciBsYXN0SHRtbCA9IGxhc3RWYWx1ZSAmJiBsYXN0
VmFsdWUuX19odG1sOworICAgICAgICAgICAgICAgIHZhciBuZXh0SHRtbCA9IG5leHRWYWx1ZSAm
JiBuZXh0VmFsdWUuX19odG1sOworICAgICAgICAgICAgICAgIGlmIChsYXN0SHRtbCAhPT0gbmV4
dEh0bWwpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpc051bGxPclVuZGVmKG5leHRIdG1s
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZG9tLmlubmVySFRNTCA9IG5leHRIdG1sOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZWxzZSBpZiAocHJvcCAhPT0gJ2NoaWxkcmVuVHlwZScgJiYgcHJvcCAhPT0g
J3JlZicgJiYgcHJvcCAhPT0gJ2tleScpIHsKKyAgICAgICAgICAgICAgICB2YXIgZGVoeXBoZW5Q
cm9wID0gZGVoeXBoZW5Qcm9wc1twcm9wXTsKKyAgICAgICAgICAgICAgICB2YXIgbnMgPSBuYW1l
c3BhY2VzW3Byb3BdOworICAgICAgICAgICAgICAgIGlmIChucykgeworICAgICAgICAgICAgICAg
ICAgICBkb20uc2V0QXR0cmlidXRlTlMobnMsIGRlaHlwaGVuUHJvcCB8fCBwcm9wLCBuZXh0VmFs
dWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgZG9tLnNldEF0dHJpYnV0ZShkZWh5cGhlblByb3AgfHwgcHJvcCwgbmV4dFZh
bHVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisgICAgZnVuY3Rpb24gcGF0Y2hFdmVudHMobGFzdEV2ZW50cywgbmV4dEV2ZW50cywgZG9tLCBs
aWZlY3ljbGUpIHsKKyAgICAgICAgbGFzdEV2ZW50cyA9IGxhc3RFdmVudHMgfHwgRU1QVFlfT0JK
OworICAgICAgICBuZXh0RXZlbnRzID0gbmV4dEV2ZW50cyB8fCBFTVBUWV9PQko7CisgICAgICAg
IGlmIChuZXh0RXZlbnRzICE9PSBFTVBUWV9PQkopIHsKKyAgICAgICAgICAgIGZvciAodmFyIG5h
bWUgaW4gbmV4dEV2ZW50cykgeworICAgICAgICAgICAgICAgIC8vIGRvIG5vdCBhZGQgYSBoYXNP
d25Qcm9wZXJ0eSBjaGVjayBoZXJlLCBpdCBhZmZlY3RzIHBlcmZvcm1hbmNlCisgICAgICAgICAg
ICAgICAgcGF0Y2hFdmVudChuYW1lLCBsYXN0RXZlbnRzW25hbWVdLCBuZXh0RXZlbnRzW25hbWVd
LCBkb20sIGxpZmVjeWNsZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYg
KGxhc3RFdmVudHMgIT09IEVNUFRZX09CSikgeworICAgICAgICAgICAgZm9yICh2YXIgbmFtZSQx
IGluIGxhc3RFdmVudHMpIHsKKyAgICAgICAgICAgICAgICAvLyBkbyBub3QgYWRkIGEgaGFzT3du
UHJvcGVydHkgY2hlY2sgaGVyZSwgaXQgYWZmZWN0cyBwZXJmb3JtYW5jZQorICAgICAgICAgICAg
ICAgIGlmIChpc051bGxPclVuZGVmKG5leHRFdmVudHNbbmFtZSQxXSkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgcGF0Y2hFdmVudChuYW1lJDEsIGxhc3RFdmVudHNbbmFtZSQxXSwgbnVsbCwgZG9t
LCBsaWZlY3ljbGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKyAgICBmdW5jdGlvbiBwYXRjaEV2ZW50KG5hbWUsIGxhc3RWYWx1ZSwgbmV4dFZh
bHVlLCBkb20sIGxpZmVjeWNsZSkgeworICAgICAgICBpZiAobGFzdFZhbHVlICE9PSBuZXh0VmFs
dWUpIHsKKyAgICAgICAgICAgIHZhciBuYW1lTG93ZXJDYXNlID0gbmFtZS50b0xvd2VyQ2FzZSgp
OworICAgICAgICAgICAgdmFyIGRvbUV2ZW50ID0gZG9tW25hbWVMb3dlckNhc2VdOworICAgICAg
ICAgICAgLy8gaWYgdGhlIGZ1bmN0aW9uIGlzIHdyYXBwZWQsIHRoYXQgbWVhbnMgaXQncyBiZWVu
IGNvbnRyb2xsZWQgYnkgYSB3cmFwcGVyCisgICAgICAgICAgICBpZiAoZG9tRXZlbnQgJiYgZG9t
RXZlbnQud3JhcHBlZCkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmIChkZWxlZ2F0ZWRQcm9wc1tuYW1lXSkgeworICAgICAgICAgICAgICAg
IGxpZmVjeWNsZS5mYXN0VW5tb3VudCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGhhbmRsZUV2
ZW50KG5hbWUsIGxhc3RWYWx1ZSwgbmV4dFZhbHVlLCBkb20pOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgZG9tW25hbWVMb3dlckNhc2VdID0gbmV4
dFZhbHVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGZ1bmN0aW9uIHBh
dGNoUHJvcHMobGFzdFByb3BzLCBuZXh0UHJvcHMsIGRvbSwgbGlmZWN5Y2xlLCBjb250ZXh0LCBp
c1NWRykgeworICAgICAgICBsYXN0UHJvcHMgPSBsYXN0UHJvcHMgfHwgRU1QVFlfT0JKOworICAg
ICAgICBuZXh0UHJvcHMgPSBuZXh0UHJvcHMgfHwgRU1QVFlfT0JKOworICAgICAgICBpZiAobmV4
dFByb3BzICE9PSBFTVBUWV9PQkopIHsKKyAgICAgICAgICAgIGZvciAodmFyIHByb3AgaW4gbmV4
dFByb3BzKSB7CisgICAgICAgICAgICAgICAgLy8gZG8gbm90IGFkZCBhIGhhc093blByb3BlcnR5
IGNoZWNrIGhlcmUsIGl0IGFmZmVjdHMgcGVyZm9ybWFuY2UKKyAgICAgICAgICAgICAgICB2YXIg
bmV4dFZhbHVlID0gbmV4dFByb3BzW3Byb3BdOworICAgICAgICAgICAgICAgIHZhciBsYXN0VmFs
dWUgPSBsYXN0UHJvcHNbcHJvcF07CisgICAgICAgICAgICAgICAgaWYgKGlzTnVsbE9yVW5kZWYo
bmV4dFZhbHVlKSkgeworICAgICAgICAgICAgICAgICAgICByZW1vdmVQcm9wKHByb3AsIGRvbSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICBwYXRjaFByb3AocHJvcCwgbGFzdFZhbHVlLCBuZXh0VmFsdWUsIGRvbSwgaXNTVkcs
IGxpZmVjeWNsZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIGlmIChsYXN0UHJvcHMgIT09IEVNUFRZX09CSikgeworICAgICAgICAgICAgZm9y
ICh2YXIgcHJvcCQxIGluIGxhc3RQcm9wcykgeworICAgICAgICAgICAgICAgIC8vIGRvIG5vdCBh
ZGQgYSBoYXNPd25Qcm9wZXJ0eSBjaGVjayBoZXJlLCBpdCBhZmZlY3RzIHBlcmZvcm1hbmNlCisg
ICAgICAgICAgICAgICAgaWYgKGlzTnVsbE9yVW5kZWYobmV4dFByb3BzW3Byb3AkMV0pKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHJlbW92ZVByb3AocHJvcCQxLCBkb20pOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAvLyBXZSBhcmUgYXNz
dW1pbmcgaGVyZSB0aGF0IHdlIGNvbWUgZnJvbSBwYXRjaFByb3Agcm91dGluZQorICAgIC8vIC1u
ZXh0QXR0clZhbHVlIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZAorICAgIGZ1bmN0aW9uIHBh
dGNoU3R5bGUobGFzdEF0dHJWYWx1ZSwgbmV4dEF0dHJWYWx1ZSwgZG9tKSB7CisgICAgICAgIGlm
IChpc1N0cmluZyhuZXh0QXR0clZhbHVlKSkgeworICAgICAgICAgICAgZG9tLnN0eWxlLmNzc1Rl
eHQgPSBuZXh0QXR0clZhbHVlOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIGZvciAodmFyIHN0eWxlIGluIG5leHRBdHRyVmFsdWUpIHsKKyAgICAgICAgICAgIC8vIGRv
IG5vdCBhZGQgYSBoYXNPd25Qcm9wZXJ0eSBjaGVjayBoZXJlLCBpdCBhZmZlY3RzIHBlcmZvcm1h
bmNlCisgICAgICAgICAgICB2YXIgdmFsdWUgPSBuZXh0QXR0clZhbHVlW3N0eWxlXTsKKyAgICAg
ICAgICAgIGlmIChpc051bWJlcih2YWx1ZSkgJiYgIWlzVW5pdGxlc3NOdW1iZXJbc3R5bGVdKSB7
CisgICAgICAgICAgICAgICAgZG9tLnN0eWxlW3N0eWxlXSA9IHZhbHVlICsgJ3B4JzsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGRvbS5zdHlsZVtz
dHlsZV0gPSB2YWx1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoIWlz
TnVsbE9yVW5kZWYobGFzdEF0dHJWYWx1ZSkpIHsKKyAgICAgICAgICAgIGZvciAodmFyIHN0eWxl
JDEgaW4gbGFzdEF0dHJWYWx1ZSkgeworICAgICAgICAgICAgICAgIGlmIChpc051bGxPclVuZGVm
KG5leHRBdHRyVmFsdWVbc3R5bGUkMV0pKSB7CisgICAgICAgICAgICAgICAgICAgIGRvbS5zdHls
ZVtzdHlsZSQxXSA9ICcnOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKyAgICBmdW5jdGlvbiByZW1vdmVQcm9wKHByb3AsIGRvbSkgeworICAgICAg
ICBpZiAocHJvcCA9PT0gJ2NsYXNzTmFtZScpIHsKKyAgICAgICAgICAgIGRvbS5yZW1vdmVBdHRy
aWJ1dGUoJ2NsYXNzJyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAocHJvcCA9PT0gJ3Zh
bHVlJykgeworICAgICAgICAgICAgZG9tLnZhbHVlID0gJyc7CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZSBpZiAocHJvcCA9PT0gJ3N0eWxlJykgeworICAgICAgICAgICAgZG9tLnN0eWxlLmNzc1Rl
eHQgPSBudWxsOworICAgICAgICAgICAgZG9tLnJlbW92ZUF0dHJpYnV0ZSgnc3R5bGUnKTsKKyAg
ICAgICAgfQorICAgICAgICBlbHNlIGlmIChkZWxlZ2F0ZWRQcm9wc1twcm9wXSkgeworICAgICAg
ICAgICAgaGFuZGxlRXZlbnQocHJvcCwgbnVsbCwgbnVsbCwgZG9tKTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIGRvbS5yZW1vdmVBdHRyaWJ1dGUocHJvcCk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICB2YXIgcmVjeWNsaW5nRW5hYmxlZCA9IHRydWU7CisgICAgdmFy
IGNvbXBvbmVudFBvb2xzID0gbmV3IE1hcCgpOworICAgIHZhciBlbGVtZW50UG9vbHMgPSBuZXcg
TWFwKCk7CisgICAgZnVuY3Rpb24gZGlzYWJsZVJlY3ljbGluZygpIHsKKyAgICAgICAgcmVjeWNs
aW5nRW5hYmxlZCA9IGZhbHNlOworICAgICAgICBjb21wb25lbnRQb29scy5jbGVhcigpOworICAg
ICAgICBlbGVtZW50UG9vbHMuY2xlYXIoKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiByZWN5Y2xl
RWxlbWVudCh2Tm9kZSwgbGlmZWN5Y2xlLCBjb250ZXh0LCBpc1NWRykgeworICAgICAgICB2YXIg
dGFnID0gdk5vZGUudHlwZTsKKyAgICAgICAgdmFyIGtleSA9IHZOb2RlLmtleTsKKyAgICAgICAg
dmFyIHBvb2xzID0gZWxlbWVudFBvb2xzLmdldCh0YWcpOworICAgICAgICBpZiAoIWlzVW5kZWZp
bmVkKHBvb2xzKSkgeworICAgICAgICAgICAgdmFyIHBvb2wgPSBrZXkgPT09IG51bGwgPyBwb29s
cy5ub25LZXllZCA6IHBvb2xzLmtleWVkLmdldChrZXkpOworICAgICAgICAgICAgaWYgKCFpc1Vu
ZGVmaW5lZChwb29sKSkgeworICAgICAgICAgICAgICAgIHZhciByZWN5Y2xlZFZOb2RlID0gcG9v
bC5wb3AoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKHJlY3ljbGVkVk5vZGUp
KSB7CisgICAgICAgICAgICAgICAgICAgIHBhdGNoRWxlbWVudChyZWN5Y2xlZFZOb2RlLCB2Tm9k
ZSwgbnVsbCwgbGlmZWN5Y2xlLCBjb250ZXh0LCBpc1NWRywgdHJ1ZSk7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB2Tm9kZS5kb207CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgICBmdW5jdGlvbiBw
b29sRWxlbWVudCh2Tm9kZSkgeworICAgICAgICB2YXIgdGFnID0gdk5vZGUudHlwZTsKKyAgICAg
ICAgdmFyIGtleSA9IHZOb2RlLmtleTsKKyAgICAgICAgdmFyIHBvb2xzID0gZWxlbWVudFBvb2xz
LmdldCh0YWcpOworICAgICAgICBpZiAoaXNVbmRlZmluZWQocG9vbHMpKSB7CisgICAgICAgICAg
ICBwb29scyA9IHsKKyAgICAgICAgICAgICAgICBub25LZXllZDogW10sCisgICAgICAgICAgICAg
ICAga2V5ZWQ6IG5ldyBNYXAoKQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGVsZW1lbnRQ
b29scy5zZXQodGFnLCBwb29scyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlzTnVsbChrZXkp
KSB7CisgICAgICAgICAgICBwb29scy5ub25LZXllZC5wdXNoKHZOb2RlKTsKKyAgICAgICAgfQor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHZhciBwb29sID0gcG9vbHMua2V5ZWQuZ2V0KGtl
eSk7CisgICAgICAgICAgICBpZiAoaXNVbmRlZmluZWQocG9vbCkpIHsKKyAgICAgICAgICAgICAg
ICBwb29sID0gW107CisgICAgICAgICAgICAgICAgcG9vbHMua2V5ZWQuc2V0KGtleSwgcG9vbCk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwb29sLnB1c2godk5vZGUpOworICAgICAgICB9
CisgICAgfQorICAgIGZ1bmN0aW9uIHJlY3ljbGVDb21wb25lbnQodk5vZGUsIGxpZmVjeWNsZSwg
Y29udGV4dCwgaXNTVkcpIHsKKyAgICAgICAgdmFyIHR5cGUgPSB2Tm9kZS50eXBlOworICAgICAg
ICB2YXIga2V5ID0gdk5vZGUua2V5OworICAgICAgICB2YXIgcG9vbHMgPSBjb21wb25lbnRQb29s
cy5nZXQodHlwZSk7CisgICAgICAgIGlmICghaXNVbmRlZmluZWQocG9vbHMpKSB7CisgICAgICAg
ICAgICB2YXIgcG9vbCA9IGtleSA9PT0gbnVsbCA/IHBvb2xzLm5vbktleWVkIDogcG9vbHMua2V5
ZWQuZ2V0KGtleSk7CisgICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKHBvb2wpKSB7CisgICAg
ICAgICAgICAgICAgdmFyIHJlY3ljbGVkVk5vZGUgPSBwb29sLnBvcCgpOworICAgICAgICAgICAg
ICAgIGlmICghaXNVbmRlZmluZWQocmVjeWNsZWRWTm9kZSkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgdmFyIGZsYWdzID0gdk5vZGUuZmxhZ3M7CisgICAgICAgICAgICAgICAgICAgIHZhciBmYWls
ZWQgPSBwYXRjaENvbXBvbmVudChyZWN5Y2xlZFZOb2RlLCB2Tm9kZSwgbnVsbCwgbGlmZWN5Y2xl
LCBjb250ZXh0LCBpc1NWRywgZmxhZ3MgJiA0IC8qIENvbXBvbmVudENsYXNzICovLCB0cnVlKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCFmYWlsZWQpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB2Tm9kZS5kb207CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7Cisg
ICAgfQorICAgIGZ1bmN0aW9uIHBvb2xDb21wb25lbnQodk5vZGUpIHsKKyAgICAgICAgdmFyIHR5
cGUgPSB2Tm9kZS50eXBlOworICAgICAgICB2YXIga2V5ID0gdk5vZGUua2V5OworICAgICAgICB2
YXIgaG9va3MgPSB2Tm9kZS5yZWY7CisgICAgICAgIHZhciBub25SZWN5Y2xlSG9va3MgPSBob29r
cyAmJiAoaG9va3Mub25Db21wb25lbnRXaWxsTW91bnQgfHwKKyAgICAgICAgICAgIGhvb2tzLm9u
Q29tcG9uZW50V2lsbFVubW91bnQgfHwKKyAgICAgICAgICAgIGhvb2tzLm9uQ29tcG9uZW50RGlk
TW91bnQgfHwKKyAgICAgICAgICAgIGhvb2tzLm9uQ29tcG9uZW50V2lsbFVwZGF0ZSB8fAorICAg
ICAgICAgICAgaG9va3Mub25Db21wb25lbnREaWRVcGRhdGUpOworICAgICAgICBpZiAobm9uUmVj
eWNsZUhvb2tzKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdmFy
IHBvb2xzID0gY29tcG9uZW50UG9vbHMuZ2V0KHR5cGUpOworICAgICAgICBpZiAoaXNVbmRlZmlu
ZWQocG9vbHMpKSB7CisgICAgICAgICAgICBwb29scyA9IHsKKyAgICAgICAgICAgICAgICBub25L
ZXllZDogW10sCisgICAgICAgICAgICAgICAga2V5ZWQ6IG5ldyBNYXAoKQorICAgICAgICAgICAg
fTsKKyAgICAgICAgICAgIGNvbXBvbmVudFBvb2xzLnNldCh0eXBlLCBwb29scyk7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKGlzTnVsbChrZXkpKSB7CisgICAgICAgICAgICBwb29scy5ub25LZXll
ZC5wdXNoKHZOb2RlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHZh
ciBwb29sID0gcG9vbHMua2V5ZWQuZ2V0KGtleSk7CisgICAgICAgICAgICBpZiAoaXNVbmRlZmlu
ZWQocG9vbCkpIHsKKyAgICAgICAgICAgICAgICBwb29sID0gW107CisgICAgICAgICAgICAgICAg
cG9vbHMua2V5ZWQuc2V0KGtleSwgcG9vbCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBw
b29sLnB1c2godk5vZGUpOworICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gbW91bnQo
dk5vZGUsIHBhcmVudERvbSwgbGlmZWN5Y2xlLCBjb250ZXh0LCBpc1NWRykgeworICAgICAgICB2
YXIgZmxhZ3MgPSB2Tm9kZS5mbGFnczsKKyAgICAgICAgaWYgKGZsYWdzICYgMzk3MCAvKiBFbGVt
ZW50ICovKSB7CisgICAgICAgICAgICByZXR1cm4gbW91bnRFbGVtZW50KHZOb2RlLCBwYXJlbnRE
b20sIGxpZmVjeWNsZSwgY29udGV4dCwgaXNTVkcpOworICAgICAgICB9CisgICAgICAgIGVsc2Ug
aWYgKGZsYWdzICYgMjggLyogQ29tcG9uZW50ICovKSB7CisgICAgICAgICAgICByZXR1cm4gbW91
bnRDb21wb25lbnQodk5vZGUsIHBhcmVudERvbSwgbGlmZWN5Y2xlLCBjb250ZXh0LCBpc1NWRywg
ZmxhZ3MgJiA0IC8qIENvbXBvbmVudENsYXNzICovKTsKKyAgICAgICAgfQorICAgICAgICBlbHNl
IGlmIChmbGFncyAmIDQwOTYgLyogVm9pZCAqLykgeworICAgICAgICAgICAgcmV0dXJuIG1vdW50
Vm9pZCh2Tm9kZSwgcGFyZW50RG9tKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChmbGFn
cyAmIDEgLyogVGV4dCAqLykgeworICAgICAgICAgICAgcmV0dXJuIG1vdW50VGV4dCh2Tm9kZSwg
cGFyZW50RG9tKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmIChm
YWxzZSkgeworICAgICAgICAgICAgICAgIHRocm93RXJyb3IoKCJtb3VudCgpIGV4cGVjdHMgYSB2
YWxpZCBWTm9kZSwgaW5zdGVhZCBpdCByZWNlaXZlZCBhbiBvYmplY3Qgd2l0aCB0aGUgdHlwZSBc
IiIgKyAodHlwZW9mIHZOb2RlKSArICJcIi4iKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICB0aHJvd0Vycm9yKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZnVuY3Rpb24gbW91bnRUZXh0
KHZOb2RlLCBwYXJlbnREb20pIHsKKyAgICAgICAgdmFyIGRvbSA9IGRvY3VtZW50LmNyZWF0ZVRl
eHROb2RlKHZOb2RlLmNoaWxkcmVuKTsKKyAgICAgICAgdk5vZGUuZG9tID0gZG9tOworICAgICAg
ICBpZiAocGFyZW50RG9tKSB7CisgICAgICAgICAgICBhcHBlbmRDaGlsZChwYXJlbnREb20sIGRv
bSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGRvbTsKKyAgICB9CisgICAgZnVuY3Rpb24g
bW91bnRWb2lkKHZOb2RlLCBwYXJlbnREb20pIHsKKyAgICAgICAgdmFyIGRvbSA9IGRvY3VtZW50
LmNyZWF0ZVRleHROb2RlKCcnKTsKKyAgICAgICAgdk5vZGUuZG9tID0gZG9tOworICAgICAgICBp
ZiAocGFyZW50RG9tKSB7CisgICAgICAgICAgICBhcHBlbmRDaGlsZChwYXJlbnREb20sIGRvbSk7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGRvbTsKKyAgICB9CisgICAgZnVuY3Rpb24gbW91
bnRFbGVtZW50KHZOb2RlLCBwYXJlbnREb20sIGxpZmVjeWNsZSwgY29udGV4dCwgaXNTVkcpIHsK
KyAgICAgICAgaWYgKHJlY3ljbGluZ0VuYWJsZWQpIHsKKyAgICAgICAgICAgIHZhciBkb20kMSA9
IHJlY3ljbGVFbGVtZW50KHZOb2RlLCBsaWZlY3ljbGUsIGNvbnRleHQsIGlzU1ZHKTsKKyAgICAg
ICAgICAgIGlmICghaXNOdWxsKGRvbSQxKSkgeworICAgICAgICAgICAgICAgIGlmICghaXNOdWxs
KHBhcmVudERvbSkpIHsKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kQ2hpbGQocGFyZW50RG9t
LCBkb20kMSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBkb20k
MTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB2YXIgdGFnID0gdk5vZGUudHlw
ZTsKKyAgICAgICAgdmFyIGZsYWdzID0gdk5vZGUuZmxhZ3M7CisgICAgICAgIGlmIChpc1NWRyB8
fCAoZmxhZ3MgJiAxMjggLyogU3ZnRWxlbWVudCAqLykpIHsKKyAgICAgICAgICAgIGlzU1ZHID0g
dHJ1ZTsKKyAgICAgICAgfQorICAgICAgICB2YXIgZG9tID0gZG9jdW1lbnRDcmVhdGVFbGVtZW50
KHRhZywgaXNTVkcpOworICAgICAgICB2YXIgY2hpbGRyZW4gPSB2Tm9kZS5jaGlsZHJlbjsKKyAg
ICAgICAgdmFyIHByb3BzID0gdk5vZGUucHJvcHM7CisgICAgICAgIHZhciBldmVudHMgPSB2Tm9k
ZS5ldmVudHM7CisgICAgICAgIHZhciByZWYgPSB2Tm9kZS5yZWY7CisgICAgICAgIHZOb2RlLmRv
bSA9IGRvbTsKKyAgICAgICAgaWYgKCFpc051bGwoY2hpbGRyZW4pKSB7CisgICAgICAgICAgICBp
ZiAoaXNTdHJpbmdPck51bWJlcihjaGlsZHJlbikpIHsKKyAgICAgICAgICAgICAgICBzZXRUZXh0
Q29udGVudChkb20sIGNoaWxkcmVuKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2Ug
aWYgKGlzQXJyYXkoY2hpbGRyZW4pKSB7CisgICAgICAgICAgICAgICAgbW91bnRBcnJheUNoaWxk
cmVuKGNoaWxkcmVuLCBkb20sIGxpZmVjeWNsZSwgY29udGV4dCwgaXNTVkcpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoaXNWTm9kZShjaGlsZHJlbikpIHsKKyAgICAgICAg
ICAgICAgICBtb3VudChjaGlsZHJlbiwgZG9tLCBsaWZlY3ljbGUsIGNvbnRleHQsIGlzU1ZHKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoIShmbGFncyAmIDIgLyogSHRt
bEVsZW1lbnQgKi8pKSB7CisgICAgICAgICAgICBwcm9jZXNzRWxlbWVudChmbGFncywgdk5vZGUs
IGRvbSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFpc051bGwocHJvcHMpKSB7CisgICAgICAg
ICAgICBmb3IgKHZhciBwcm9wIGluIHByb3BzKSB7CisgICAgICAgICAgICAgICAgLy8gZG8gbm90
IGFkZCBhIGhhc093blByb3BlcnR5IGNoZWNrIGhlcmUsIGl0IGFmZmVjdHMgcGVyZm9ybWFuY2UK
KyAgICAgICAgICAgICAgICBwYXRjaFByb3AocHJvcCwgbnVsbCwgcHJvcHNbcHJvcF0sIGRvbSwg
aXNTVkcsIGxpZmVjeWNsZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYg
KCFpc051bGwoZXZlbnRzKSkgeworICAgICAgICAgICAgZm9yICh2YXIgbmFtZSBpbiBldmVudHMp
IHsKKyAgICAgICAgICAgICAgICAvLyBkbyBub3QgYWRkIGEgaGFzT3duUHJvcGVydHkgY2hlY2sg
aGVyZSwgaXQgYWZmZWN0cyBwZXJmb3JtYW5jZQorICAgICAgICAgICAgICAgIHBhdGNoRXZlbnQo
bmFtZSwgbnVsbCwgZXZlbnRzW25hbWVdLCBkb20sIGxpZmVjeWNsZSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFpc051bGwocmVmKSkgeworICAgICAgICAgICAgbW91
bnRSZWYoZG9tLCByZWYsIGxpZmVjeWNsZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFpc051
bGwocGFyZW50RG9tKSkgeworICAgICAgICAgICAgYXBwZW5kQ2hpbGQocGFyZW50RG9tLCBkb20p
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBkb207CisgICAgfQorICAgIGZ1bmN0aW9uIG1v
dW50QXJyYXlDaGlsZHJlbihjaGlsZHJlbiwgZG9tLCBsaWZlY3ljbGUsIGNvbnRleHQsIGlzU1ZH
KSB7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHsK
KyAgICAgICAgICAgIHZhciBjaGlsZCA9IGNoaWxkcmVuW2ldOworICAgICAgICAgICAgaWYgKCFp
c0ludmFsaWQoY2hpbGQpKSB7CisgICAgICAgICAgICAgICAgaWYgKGNoaWxkLmRvbSkgeworICAg
ICAgICAgICAgICAgICAgICBjaGlsZHJlbltpXSA9IGNoaWxkID0gY2xvbmVWTm9kZShjaGlsZCk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1vdW50KGNoaWxkcmVuW2ldLCBk
b20sIGxpZmVjeWNsZSwgY29udGV4dCwgaXNTVkcpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorICAgIGZ1bmN0aW9uIG1vdW50Q29tcG9uZW50KHZOb2RlLCBwYXJlbnREb20sIGxp
ZmVjeWNsZSwgY29udGV4dCwgaXNTVkcsIGlzQ2xhc3MpIHsKKyAgICAgICAgaWYgKHJlY3ljbGlu
Z0VuYWJsZWQpIHsKKyAgICAgICAgICAgIHZhciBkb20kMSA9IHJlY3ljbGVDb21wb25lbnQodk5v
ZGUsIGxpZmVjeWNsZSwgY29udGV4dCwgaXNTVkcpOworICAgICAgICAgICAgaWYgKCFpc051bGwo
ZG9tJDEpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFpc051bGwocGFyZW50RG9tKSkgeworICAg
ICAgICAgICAgICAgICAgICBhcHBlbmRDaGlsZChwYXJlbnREb20sIGRvbSQxKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIGRvbSQxOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIHZhciB0eXBlID0gdk5vZGUudHlwZTsKKyAgICAgICAgdmFyIHBy
b3BzID0gdk5vZGUucHJvcHMgfHwgRU1QVFlfT0JKOworICAgICAgICB2YXIgcmVmID0gdk5vZGUu
cmVmOworICAgICAgICB2YXIgZG9tOworICAgICAgICBpZiAoaXNDbGFzcykgeworICAgICAgICAg
ICAgdmFyIGRlZmF1bHRQcm9wcyA9IHR5cGUuZGVmYXVsdFByb3BzOworICAgICAgICAgICAgbGlm
ZWN5Y2xlLmZhc3RVbm1vdW50ID0gZmFsc2U7CisgICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVk
KGRlZmF1bHRQcm9wcykpIHsKKyAgICAgICAgICAgICAgICBjb3B5UHJvcHNUbyhkZWZhdWx0UHJv
cHMsIHByb3BzKTsKKyAgICAgICAgICAgICAgICB2Tm9kZS5wcm9wcyA9IHByb3BzOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgdmFyIGluc3RhbmNlID0gY3JlYXRlU3RhdGVmdWxDb21wb25l
bnRJbnN0YW5jZSh2Tm9kZSwgdHlwZSwgcHJvcHMsIGNvbnRleHQsIGlzU1ZHLCBkZXZUb29sc1N0
YXR1cyk7CisgICAgICAgICAgICB2YXIgaW5wdXQgPSBpbnN0YW5jZS5fbGFzdElucHV0OworICAg
ICAgICAgICAgdmFyIGZhc3RVbm1vdW50ID0gbGlmZWN5Y2xlLmZhc3RVbm1vdW50OworICAgICAg
ICAgICAgLy8gd2Ugc3RvcmUgdGhlIGZhc3RVbm1vdW50IHZhbHVlLCBidXQgd2Ugc2V0IGl0IGJh
Y2sgdG8gdHJ1ZSBvbiB0aGUgbGlmZWN5Y2xlCisgICAgICAgICAgICAvLyB3ZSBkbyB0aGlzIHNv
IHdlIGNhbiBkZXRlcm1pbmUgaWYgdGhlIGNvbXBvbmVudCByZW5kZXIgaGFzIGEgZmFzdFVubW91
bnQgb3Igbm90CisgICAgICAgICAgICBsaWZlY3ljbGUuZmFzdFVubW91bnQgPSB0cnVlOworICAg
ICAgICAgICAgaW5zdGFuY2UuX3ZOb2RlID0gdk5vZGU7CisgICAgICAgICAgICB2Tm9kZS5kb20g
PSBkb20gPSBtb3VudChpbnB1dCwgbnVsbCwgbGlmZWN5Y2xlLCBpbnN0YW5jZS5fY2hpbGRDb250
ZXh0LCBpc1NWRyk7CisgICAgICAgICAgICAvLyB3ZSBub3cgY3JlYXRlIGEgbGlmZWN5Y2xlIGZv
ciB0aGlzIGNvbXBvbmVudCBhbmQgc3RvcmUgdGhlIGZhc3RVbm1vdW50IHZhbHVlCisgICAgICAg
ICAgICB2YXIgc3ViTGlmZWN5Y2xlID0gaW5zdGFuY2UuX2xpZmVjeWNsZSA9IG5ldyBMaWZlY3lj
bGUoKTsKKyAgICAgICAgICAgIHN1YkxpZmVjeWNsZS5mYXN0VW5tb3VudCA9IGxpZmVjeWNsZS5m
YXN0VW5tb3VudDsKKyAgICAgICAgICAgIC8vIHdlIHRoZW4gc2V0IHRoZSBsaWZlY3ljbGUgZmFz
dFVubW91bnQgdmFsdWUgYmFjayB0byB3aGF0IGl0IHdhcyBiZWZvcmUgdGhlIG1vdW50CisgICAg
ICAgICAgICBsaWZlY3ljbGUuZmFzdFVubW91bnQgPSBmYXN0VW5tb3VudDsKKyAgICAgICAgICAg
IGlmICghaXNOdWxsKHBhcmVudERvbSkpIHsKKyAgICAgICAgICAgICAgICBhcHBlbmRDaGlsZChw
YXJlbnREb20sIGRvbSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtb3VudFN0YXRlZnVs
Q29tcG9uZW50Q2FsbGJhY2tzKHJlZiwgaW5zdGFuY2UsIGxpZmVjeWNsZSk7CisgICAgICAgICAg
ICBmaW5kRE9NTm9kZUVuYWJsZWQgJiYgY29tcG9uZW50VG9ET01Ob2RlTWFwLnNldChpbnN0YW5j
ZSwgZG9tKTsKKyAgICAgICAgICAgIHZOb2RlLmNoaWxkcmVuID0gaW5zdGFuY2U7CisgICAgICAg
IH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB2YXIgaW5wdXQkMSA9IGNyZWF0ZVN0YXRl
bGVzc0NvbXBvbmVudElucHV0KHZOb2RlLCB0eXBlLCBwcm9wcywgY29udGV4dCk7CisgICAgICAg
ICAgICB2Tm9kZS5kb20gPSBkb20gPSBtb3VudChpbnB1dCQxLCBudWxsLCBsaWZlY3ljbGUsIGNv
bnRleHQsIGlzU1ZHKTsKKyAgICAgICAgICAgIHZOb2RlLmNoaWxkcmVuID0gaW5wdXQkMTsKKyAg
ICAgICAgICAgIG1vdW50U3RhdGVsZXNzQ29tcG9uZW50Q2FsbGJhY2tzKHJlZiwgZG9tLCBsaWZl
Y3ljbGUpOworICAgICAgICAgICAgaWYgKCFpc051bGwocGFyZW50RG9tKSkgeworICAgICAgICAg
ICAgICAgIGFwcGVuZENoaWxkKHBhcmVudERvbSwgZG9tKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gZG9tOworICAgIH0KKyAgICBmdW5jdGlvbiBtb3VudFN0YXRl
ZnVsQ29tcG9uZW50Q2FsbGJhY2tzKHJlZiwgaW5zdGFuY2UsIGxpZmVjeWNsZSkgeworICAgICAg
ICBpZiAocmVmKSB7CisgICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihyZWYpKSB7CisgICAgICAg
ICAgICAgICAgcmVmKGluc3RhbmNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgIGlmIChmYWxzZSkgeworICAgICAgICAgICAgICAgICAgICB0aHJv
d0Vycm9yKCdzdHJpbmcgInJlZnMiIGFyZSBub3Qgc3VwcG9ydGVkIGluIEluZmVybm8gMS4wLiBV
c2UgY2FsbGJhY2sgInJlZnMiIGluc3RlYWQuJyk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIHRocm93RXJyb3IoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICBpZiAoIWlzTnVsbChpbnN0YW5jZS5jb21wb25lbnREaWRNb3VudCkpIHsKKyAgICAgICAgICAg
IGxpZmVjeWNsZS5hZGRMaXN0ZW5lcihmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgaW5z
dGFuY2UuY29tcG9uZW50RGlkTW91bnQoKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9Cisg
ICAgfQorICAgIGZ1bmN0aW9uIG1vdW50U3RhdGVsZXNzQ29tcG9uZW50Q2FsbGJhY2tzKHJlZiwg
ZG9tLCBsaWZlY3ljbGUpIHsKKyAgICAgICAgaWYgKHJlZikgeworICAgICAgICAgICAgaWYgKCFp
c051bGxPclVuZGVmKHJlZi5vbkNvbXBvbmVudFdpbGxNb3VudCkpIHsKKyAgICAgICAgICAgICAg
ICBsaWZlY3ljbGUuZmFzdFVubW91bnQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICByZWYub25D
b21wb25lbnRXaWxsTW91bnQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghaXNO
dWxsT3JVbmRlZihyZWYub25Db21wb25lbnREaWRNb3VudCkpIHsKKyAgICAgICAgICAgICAgICBs
aWZlY3ljbGUuZmFzdFVubW91bnQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBsaWZlY3ljbGUu
YWRkTGlzdGVuZXIoZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVmLm9uQ29tcG9uZW50RGlkTW91bnQo
ZG9tKTsgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZnVuY3Rpb24g
bW91bnRSZWYoZG9tLCB2YWx1ZSwgbGlmZWN5Y2xlKSB7CisgICAgICAgIGlmIChpc0Z1bmN0aW9u
KHZhbHVlKSkgeworICAgICAgICAgICAgbGlmZWN5Y2xlLmZhc3RVbm1vdW50ID0gZmFsc2U7Cisg
ICAgICAgICAgICBsaWZlY3ljbGUuYWRkTGlzdGVuZXIoZnVuY3Rpb24gKCkgeyByZXR1cm4gdmFs
dWUoZG9tKTsgfSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiAo
aXNJbnZhbGlkKHZhbHVlKSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmIChmYWxzZSkgeworICAgICAgICAgICAgICAgIHRocm93RXJyb3Io
J3N0cmluZyAicmVmcyIgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gSW5mZXJubyAxLjAuIFVzZSBjYWxs
YmFjayAicmVmcyIgaW5zdGVhZC4nKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRocm93
RXJyb3IoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIGNvcHlQcm9wc1RvKGNv
cHlGcm9tLCBjb3B5VG8pIHsKKyAgICAgICAgZm9yICh2YXIgcHJvcCBpbiBjb3B5RnJvbSkgewor
ICAgICAgICAgICAgaWYgKGlzVW5kZWZpbmVkKGNvcHlUb1twcm9wXSkpIHsKKyAgICAgICAgICAg
ICAgICBjb3B5VG9bcHJvcF0gPSBjb3B5RnJvbVtwcm9wXTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKyAgICBmdW5jdGlvbiBjcmVhdGVTdGF0ZWZ1bENvbXBvbmVudEluc3RhbmNl
KHZOb2RlLCBDb21wb25lbnQsIHByb3BzLCBjb250ZXh0LCBpc1NWRywgZGV2VG9vbHNTdGF0dXMp
IHsKKyAgICAgICAgaWYgKGlzVW5kZWZpbmVkKGNvbnRleHQpKSB7CisgICAgICAgICAgICBjb250
ZXh0ID0ge307CisgICAgICAgIH0KKyAgICAgICAgdmFyIGluc3RhbmNlID0gbmV3IENvbXBvbmVu
dChwcm9wcywgY29udGV4dCk7CisgICAgICAgIGluc3RhbmNlLmNvbnRleHQgPSBjb250ZXh0Owor
ICAgICAgICBpZiAoaW5zdGFuY2UucHJvcHMgPT09IEVNUFRZX09CSikgeworICAgICAgICAgICAg
aW5zdGFuY2UucHJvcHMgPSBwcm9wczsKKyAgICAgICAgfQorICAgICAgICBpbnN0YW5jZS5fcGF0
Y2ggPSBwYXRjaDsKKyAgICAgICAgaW5zdGFuY2UuX2RldlRvb2xzU3RhdHVzID0gZGV2VG9vbHNT
dGF0dXM7CisgICAgICAgIGlmIChmaW5kRE9NTm9kZUVuYWJsZWQpIHsKKyAgICAgICAgICAgIGlu
c3RhbmNlLl9jb21wb25lbnRUb0RPTU5vZGVNYXAgPSBjb21wb25lbnRUb0RPTU5vZGVNYXA7Cisg
ICAgICAgIH0KKyAgICAgICAgdmFyIGNoaWxkQ29udGV4dCA9IGluc3RhbmNlLmdldENoaWxkQ29u
dGV4dCgpOworICAgICAgICBpZiAoIWlzTnVsbE9yVW5kZWYoY2hpbGRDb250ZXh0KSkgeworICAg
ICAgICAgICAgaW5zdGFuY2UuX2NoaWxkQ29udGV4dCA9IE9iamVjdC5hc3NpZ24oe30sIGNvbnRl
eHQsIGNoaWxkQ29udGV4dCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICBpbnN0YW5jZS5fY2hpbGRDb250ZXh0ID0gY29udGV4dDsKKyAgICAgICAgfQorICAgICAgICBp
bnN0YW5jZS5fdW5tb3VudGVkID0gZmFsc2U7CisgICAgICAgIGluc3RhbmNlLl9wZW5kaW5nU2V0
U3RhdGUgPSB0cnVlOworICAgICAgICBpbnN0YW5jZS5faXNTVkcgPSBpc1NWRzsKKyAgICAgICAg
aW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50KCk7CisgICAgICAgIGluc3RhbmNlLl9iZWZvcmVS
ZW5kZXIgJiYgaW5zdGFuY2UuX2JlZm9yZVJlbmRlcigpOworICAgICAgICB2YXIgaW5wdXQgPSBp
bnN0YW5jZS5yZW5kZXIocHJvcHMsIGluc3RhbmNlLnN0YXRlLCBjb250ZXh0KTsKKyAgICAgICAg
aW5zdGFuY2UuX2FmdGVyUmVuZGVyICYmIGluc3RhbmNlLl9hZnRlclJlbmRlcigpOworICAgICAg
ICBpZiAoaXNBcnJheShpbnB1dCkpIHsKKyAgICAgICAgICAgIGlmIChmYWxzZSkgeworICAgICAg
ICAgICAgICAgIHRocm93RXJyb3IoJ2EgdmFsaWQgSW5mZXJubyBWTm9kZSAob3IgbnVsbCkgbXVz
dCBiZSByZXR1cm5lZCBmcm9tIGEgY29tcG9uZW50IHJlbmRlci4gWW91IG1heSBoYXZlIHJldHVy
bmVkIGFuIGFycmF5IG9yIGFuIGludmFsaWQgb2JqZWN0LicpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgdGhyb3dFcnJvcigpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGlzSW52
YWxpZChpbnB1dCkpIHsKKyAgICAgICAgICAgIGlucHV0ID0gY3JlYXRlVm9pZFZOb2RlKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiAoaW5wdXQuZG9tKSB7Cisg
ICAgICAgICAgICAgICAgaW5wdXQgPSBjbG9uZVZOb2RlKGlucHV0KTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmIChpbnB1dC5mbGFncyAmIDI4IC8qIENvbXBvbmVudCAqLykgeworICAg
ICAgICAgICAgICAgIC8vIGlmIHdlIGhhdmUgYW4gaW5wdXQgdGhhdCBpcyBhbHNvIGEgY29tcG9u
ZW50LCB3ZSBydW4gaW50byBhIHRyaWNreSBzaXR1YXRpb24KKyAgICAgICAgICAgICAgICAvLyB3
aGVyZSB0aGUgcm9vdCB2Tm9kZSBuZWVkcyB0byBhbHdheXMgaGF2ZSB0aGUgY29ycmVjdCBET00g
ZW50cnkKKyAgICAgICAgICAgICAgICAvLyBzbyB3ZSBicmVhayBtb25vbW9ycGhpc20gb24gb3Vy
IGlucHV0IGFuZCBzdXBwbHkgaXQgb3VyIHZOb2RlIGFzIHBhcmVudFZOb2RlCisgICAgICAgICAg
ICAgICAgLy8gd2UgY2FuIG9wdGltaXNlIHRoaXMgaW4gdGhlIGZ1dHVyZSwgYnV0IHRoaXMgZ2V0
cyB1cyBvdXQgb2YgYSBsb3Qgb2YgaXNzdWVzCisgICAgICAgICAgICAgICAgaW5wdXQucGFyZW50
Vk5vZGUgPSB2Tm9kZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpbnN0YW5j
ZS5fcGVuZGluZ1NldFN0YXRlID0gZmFsc2U7CisgICAgICAgIGluc3RhbmNlLl9sYXN0SW5wdXQg
PSBpbnB1dDsKKyAgICAgICAgcmV0dXJuIGluc3RhbmNlOworICAgIH0KKyAgICBmdW5jdGlvbiBy
ZXBsYWNlTGFzdENoaWxkQW5kVW5tb3VudChsYXN0SW5wdXQsIG5leHRJbnB1dCwgcGFyZW50RG9t
LCBsaWZlY3ljbGUsIGNvbnRleHQsIGlzU1ZHLCBpc1JlY3ljbGluZykgeworICAgICAgICByZXBs
YWNlVk5vZGUocGFyZW50RG9tLCBtb3VudChuZXh0SW5wdXQsIG51bGwsIGxpZmVjeWNsZSwgY29u
dGV4dCwgaXNTVkcpLCBsYXN0SW5wdXQsIGxpZmVjeWNsZSwgaXNSZWN5Y2xpbmcpOworICAgIH0K
KyAgICBmdW5jdGlvbiByZXBsYWNlVk5vZGUocGFyZW50RG9tLCBkb20sIHZOb2RlLCBsaWZlY3lj
bGUsIGlzUmVjeWNsaW5nKSB7CisgICAgICAgIHZhciBzaGFsbG93VW5tb3VudCA9IGZhbHNlOwor
ICAgICAgICAvLyB3ZSBjYW5ub3QgY2FjaGUgbm9kZVR5cGUgaGVyZSBhcyB2Tm9kZSBtaWdodCBi
ZSByZS1hc3NpZ25lZCBiZWxvdworICAgICAgICBpZiAodk5vZGUuZmxhZ3MgJiAyOCAvKiBDb21w
b25lbnQgKi8pIHsKKyAgICAgICAgICAgIC8vIGlmIHdlIGFyZSBhY2Nlc3NpbmcgYSBzdGF0ZWZ1
bCBvciBzdGF0ZWxlc3MgY29tcG9uZW50LCB3ZSB3YW50IHRvIGFjY2VzcyB0aGVpciBsYXN0IHJl
bmRlcmVkIGlucHV0CisgICAgICAgICAgICAvLyBhY2Nlc3NpbmcgdGhlaXIgRE9NIG5vZGUgaXMg
bm90IHVzZWZ1bCB0byB1cyBoZXJlCisgICAgICAgICAgICB1bm1vdW50KHZOb2RlLCBudWxsLCBs
aWZlY3ljbGUsIGZhbHNlLCBmYWxzZSwgaXNSZWN5Y2xpbmcpOworICAgICAgICAgICAgdk5vZGUg
PSB2Tm9kZS5jaGlsZHJlbi5fbGFzdElucHV0IHx8IHZOb2RlLmNoaWxkcmVuOworICAgICAgICAg
ICAgc2hhbGxvd1VubW91bnQgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIHJlcGxhY2VDaGls
ZChwYXJlbnREb20sIGRvbSwgdk5vZGUuZG9tKTsKKyAgICAgICAgdW5tb3VudCh2Tm9kZSwgbnVs
bCwgbGlmZWN5Y2xlLCBmYWxzZSwgc2hhbGxvd1VubW91bnQsIGlzUmVjeWNsaW5nKTsKKyAgICB9
CisgICAgZnVuY3Rpb24gY3JlYXRlU3RhdGVsZXNzQ29tcG9uZW50SW5wdXQodk5vZGUsIGNvbXBv
bmVudCwgcHJvcHMsIGNvbnRleHQpIHsKKyAgICAgICAgdmFyIGlucHV0ID0gY29tcG9uZW50KHBy
b3BzLCBjb250ZXh0KTsKKyAgICAgICAgaWYgKGlzQXJyYXkoaW5wdXQpKSB7CisgICAgICAgICAg
ICBpZiAoZmFsc2UpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKCdhIHZhbGlkIEluZmVy
bm8gVk5vZGUgKG9yIG51bGwpIG11c3QgYmUgcmV0dXJuZWQgZnJvbSBhIGNvbXBvbmVudCByZW5k
ZXIuIFlvdSBtYXkgaGF2ZSByZXR1cm5lZCBhbiBhcnJheSBvciBhbiBpbnZhbGlkIG9iamVjdC4n
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRocm93RXJyb3IoKTsKKyAgICAgICAgfQor
ICAgICAgICBlbHNlIGlmIChpc0ludmFsaWQoaW5wdXQpKSB7CisgICAgICAgICAgICBpbnB1dCA9
IGNyZWF0ZVZvaWRWTm9kZSgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgaWYgKGlucHV0LmRvbSkgeworICAgICAgICAgICAgICAgIGlucHV0ID0gY2xvbmVWTm9kZShp
bnB1dCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaW5wdXQuZmxhZ3MgJiAyOCAv
KiBDb21wb25lbnQgKi8pIHsKKyAgICAgICAgICAgICAgICAvLyBpZiB3ZSBoYXZlIGFuIGlucHV0
IHRoYXQgaXMgYWxzbyBhIGNvbXBvbmVudCwgd2UgcnVuIGludG8gYSB0cmlja3kgc2l0dWF0aW9u
CisgICAgICAgICAgICAgICAgLy8gd2hlcmUgdGhlIHJvb3Qgdk5vZGUgbmVlZHMgdG8gYWx3YXlz
IGhhdmUgdGhlIGNvcnJlY3QgRE9NIGVudHJ5CisgICAgICAgICAgICAgICAgLy8gc28gd2UgYnJl
YWsgbW9ub21vcnBoaXNtIG9uIG91ciBpbnB1dCBhbmQgc3VwcGx5IGl0IG91ciB2Tm9kZSBhcyBw
YXJlbnRWTm9kZQorICAgICAgICAgICAgICAgIC8vIHdlIGNhbiBvcHRpbWlzZSB0aGlzIGluIHRo
ZSBmdXR1cmUsIGJ1dCB0aGlzIGdldHMgdXMgb3V0IG9mIGEgbG90IG9mIGlzc3VlcworICAgICAg
ICAgICAgICAgIGlucHV0LnBhcmVudFZOb2RlID0gdk5vZGU7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIGlucHV0OworICAgIH0KKyAgICBmdW5jdGlvbiBzZXRUZXh0
Q29udGVudChkb20sIHRleHQpIHsKKyAgICAgICAgaWYgKHRleHQgIT09ICcnKSB7CisgICAgICAg
ICAgICBkb20udGV4dENvbnRlbnQgPSB0ZXh0OworICAgICAgICB9CisgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgZG9tLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKSk7
CisgICAgICAgIH0KKyAgICB9CisgICAgZnVuY3Rpb24gdXBkYXRlVGV4dENvbnRlbnQoZG9tLCB0
ZXh0KSB7CisgICAgICAgIGRvbS5maXJzdENoaWxkLm5vZGVWYWx1ZSA9IHRleHQ7CisgICAgfQor
ICAgIGZ1bmN0aW9uIGFwcGVuZENoaWxkKHBhcmVudERvbSwgZG9tKSB7CisgICAgICAgIHBhcmVu
dERvbS5hcHBlbmRDaGlsZChkb20pOworICAgIH0KKyAgICBmdW5jdGlvbiBpbnNlcnRPckFwcGVu
ZChwYXJlbnREb20sIG5ld05vZGUsIG5leHROb2RlKSB7CisgICAgICAgIGlmIChpc051bGxPclVu
ZGVmKG5leHROb2RlKSkgeworICAgICAgICAgICAgYXBwZW5kQ2hpbGQocGFyZW50RG9tLCBuZXdO
b2RlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHBhcmVudERvbS5p
bnNlcnRCZWZvcmUobmV3Tm9kZSwgbmV4dE5vZGUpOworICAgICAgICB9CisgICAgfQorICAgIGZ1
bmN0aW9uIGRvY3VtZW50Q3JlYXRlRWxlbWVudCh0YWcsIGlzU1ZHKSB7CisgICAgICAgIGlmIChp
c1NWRyA9PT0gdHJ1ZSkgeworICAgICAgICAgICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnROUyhzdmdOUywgdGFnKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
IHJldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZyk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgZnVuY3Rpb24gcmVwbGFjZVdpdGhOZXdOb2RlKGxhc3ROb2RlLCBuZXh0Tm9kZSwgcGFyZW50
RG9tLCBsaWZlY3ljbGUsIGNvbnRleHQsIGlzU1ZHLCBpc1JlY3ljbGluZykgeworICAgICAgICB1
bm1vdW50KGxhc3ROb2RlLCBudWxsLCBsaWZlY3ljbGUsIGZhbHNlLCBmYWxzZSwgaXNSZWN5Y2xp
bmcpOworICAgICAgICB2YXIgZG9tID0gbW91bnQobmV4dE5vZGUsIG51bGwsIGxpZmVjeWNsZSwg
Y29udGV4dCwgaXNTVkcpOworICAgICAgICBuZXh0Tm9kZS5kb20gPSBkb207CisgICAgICAgIHJl
cGxhY2VDaGlsZChwYXJlbnREb20sIGRvbSwgbGFzdE5vZGUuZG9tKTsKKyAgICB9CisgICAgZnVu
Y3Rpb24gcmVwbGFjZUNoaWxkKHBhcmVudERvbSwgbmV4dERvbSwgbGFzdERvbSkgeworICAgICAg
ICBpZiAoIXBhcmVudERvbSkgeworICAgICAgICAgICAgcGFyZW50RG9tID0gbGFzdERvbS5wYXJl
bnROb2RlOworICAgICAgICB9CisgICAgICAgIHBhcmVudERvbS5yZXBsYWNlQ2hpbGQobmV4dERv
bSwgbGFzdERvbSk7CisgICAgfQorICAgIGZ1bmN0aW9uIHJlbW92ZUNoaWxkKHBhcmVudERvbSwg
ZG9tKSB7CisgICAgICAgIHBhcmVudERvbS5yZW1vdmVDaGlsZChkb20pOworICAgIH0KKyAgICBm
dW5jdGlvbiByZW1vdmVBbGxDaGlsZHJlbihkb20sIGNoaWxkcmVuLCBsaWZlY3ljbGUsIHNoYWxs
b3dVbm1vdW50LCBpc1JlY3ljbGluZykgeworICAgICAgICBkb20udGV4dENvbnRlbnQgPSAnJzsK
KyAgICAgICAgaWYgKCFsaWZlY3ljbGUuZmFzdFVubW91bnQpIHsKKyAgICAgICAgICAgIHJlbW92
ZUNoaWxkcmVuKG51bGwsIGNoaWxkcmVuLCBsaWZlY3ljbGUsIHNoYWxsb3dVbm1vdW50LCBpc1Jl
Y3ljbGluZyk7CisgICAgICAgIH0KKyAgICB9CisgICAgZnVuY3Rpb24gcmVtb3ZlQ2hpbGRyZW4o
ZG9tLCBjaGlsZHJlbiwgbGlmZWN5Y2xlLCBzaGFsbG93VW5tb3VudCwgaXNSZWN5Y2xpbmcpIHsK
KyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykgeworICAg
ICAgICAgICAgdmFyIGNoaWxkID0gY2hpbGRyZW5baV07CisgICAgICAgICAgICBpZiAoIWlzSW52
YWxpZChjaGlsZCkpIHsKKyAgICAgICAgICAgICAgICB1bm1vdW50KGNoaWxkLCBkb20sIGxpZmVj
eWNsZSwgdHJ1ZSwgc2hhbGxvd1VubW91bnQsIGlzUmVjeWNsaW5nKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKyAgICBmdW5jdGlvbiBpc0tleWVkKGxhc3RDaGlsZHJlbiwgbmV4
dENoaWxkcmVuKSB7CisgICAgICAgIHJldHVybiBuZXh0Q2hpbGRyZW4ubGVuZ3RoICYmICFpc051
bGxPclVuZGVmKG5leHRDaGlsZHJlblswXSkgJiYgIWlzTnVsbE9yVW5kZWYobmV4dENoaWxkcmVu
WzBdLmtleSkKKyAgICAgICAgICAgICYmIGxhc3RDaGlsZHJlbi5sZW5ndGggJiYgIWlzTnVsbE9y
VW5kZWYobGFzdENoaWxkcmVuWzBdKSAmJiAhaXNOdWxsT3JVbmRlZihsYXN0Q2hpbGRyZW5bMF0u
a2V5KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBub3JtYWxpc2VDaGlsZE5vZGVzKGRvbSkgewor
ICAgICAgICB2YXIgcmF3Q2hpbGROb2RlcyA9IGRvbS5jaGlsZE5vZGVzOworICAgICAgICB2YXIg
bGVuZ3RoID0gcmF3Q2hpbGROb2Rlcy5sZW5ndGg7CisgICAgICAgIHZhciBpID0gMDsKKyAgICAg
ICAgd2hpbGUgKGkgPCBsZW5ndGgpIHsKKyAgICAgICAgICAgIHZhciByYXdDaGlsZCA9IHJhd0No
aWxkTm9kZXNbaV07CisgICAgICAgICAgICBpZiAocmF3Q2hpbGQubm9kZVR5cGUgPT09IDgpIHsK
KyAgICAgICAgICAgICAgICBpZiAocmF3Q2hpbGQuZGF0YSA9PT0gJyEnKSB7CisgICAgICAgICAg
ICAgICAgICAgIHZhciBwbGFjZWhvbGRlciA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTsK
KyAgICAgICAgICAgICAgICAgICAgZG9tLnJlcGxhY2VDaGlsZChwbGFjZWhvbGRlciwgcmF3Q2hp
bGQpOworICAgICAgICAgICAgICAgICAgICBpKys7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBkb20ucmVtb3ZlQ2hpbGQocmF3
Q2hpbGQpOworICAgICAgICAgICAgICAgICAgICBsZW5ndGgtLTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBpKys7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZnVuY3Rpb24gaHlkcmF0ZUNv
bXBvbmVudCh2Tm9kZSwgZG9tLCBsaWZlY3ljbGUsIGNvbnRleHQsIGlzU1ZHLCBpc0NsYXNzKSB7
CisgICAgICAgIHZhciB0eXBlID0gdk5vZGUudHlwZTsKKyAgICAgICAgdmFyIHByb3BzID0gdk5v
ZGUucHJvcHMgfHwge307CisgICAgICAgIHZhciByZWYgPSB2Tm9kZS5yZWY7CisgICAgICAgIHZO
b2RlLmRvbSA9IGRvbTsKKyAgICAgICAgaWYgKGlzQ2xhc3MpIHsKKyAgICAgICAgICAgIHZhciBf
aXNTVkcgPSBkb20ubmFtZXNwYWNlVVJJID09PSBzdmdOUzsKKyAgICAgICAgICAgIHZhciBkZWZh
dWx0UHJvcHMgPSB0eXBlLmRlZmF1bHRQcm9wczsKKyAgICAgICAgICAgIGxpZmVjeWNsZS5mYXN0
VW5tb3VudCA9IGZhbHNlOworICAgICAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChkZWZhdWx0UHJv
cHMpKSB7CisgICAgICAgICAgICAgICAgY29weVByb3BzVG8oZGVmYXVsdFByb3BzLCBwcm9wcyk7
CisgICAgICAgICAgICAgICAgdk5vZGUucHJvcHMgPSBwcm9wczsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHZhciBpbnN0YW5jZSA9IGNyZWF0ZVN0YXRlZnVsQ29tcG9uZW50SW5zdGFuY2Uo
dk5vZGUsIHR5cGUsIHByb3BzLCBjb250ZXh0LCBfaXNTVkcsIGRldlRvb2xzU3RhdHVzKTsKKyAg
ICAgICAgICAgIHZhciBpbnB1dCA9IGluc3RhbmNlLl9sYXN0SW5wdXQ7CisgICAgICAgICAgICB2
YXIgZmFzdFVubW91bnQgPSBsaWZlY3ljbGUuZmFzdFVubW91bnQ7CisgICAgICAgICAgICAvLyB3
ZSBzdG9yZSB0aGUgZmFzdFVubW91bnQgdmFsdWUsIGJ1dCB3ZSBzZXQgaXQgYmFjayB0byB0cnVl
IG9uIHRoZSBsaWZlY3ljbGUKKyAgICAgICAgICAgIC8vIHdlIGRvIHRoaXMgc28gd2UgY2FuIGRl
dGVybWluZSBpZiB0aGUgY29tcG9uZW50IHJlbmRlciBoYXMgYSBmYXN0VW5tb3VudCBvciBub3Qg
ICAgICAKKyAgICAgICAgICAgIGxpZmVjeWNsZS5mYXN0VW5tb3VudCA9IHRydWU7CisgICAgICAg
ICAgICBpbnN0YW5jZS5fdkNvbXBvbmVudCA9IHZOb2RlOworICAgICAgICAgICAgaW5zdGFuY2Uu
X3ZOb2RlID0gdk5vZGU7CisgICAgICAgICAgICBoeWRyYXRlKGlucHV0LCBkb20sIGxpZmVjeWNs
ZSwgaW5zdGFuY2UuX2NoaWxkQ29udGV4dCwgX2lzU1ZHKTsKKyAgICAgICAgICAgIHZhciBzdWJM
aWZlY3ljbGUgPSBpbnN0YW5jZS5fbGlmZWN5Y2xlID0gbmV3IExpZmVjeWNsZSgpOworICAgICAg
ICAgICAgc3ViTGlmZWN5Y2xlLmZhc3RVbm1vdW50ID0gbGlmZWN5Y2xlLmZhc3RVbm1vdW50Owor
ICAgICAgICAgICAgLy8gd2UgdGhlbiBzZXQgdGhlIGxpZmVjeWNsZSBmYXN0VW5tb3VudCB2YWx1
ZSBiYWNrIHRvIHdoYXQgaXQgd2FzIGJlZm9yZSB0aGUgbW91bnQKKyAgICAgICAgICAgIGxpZmVj
eWNsZS5mYXN0VW5tb3VudCA9IGZhc3RVbm1vdW50OworICAgICAgICAgICAgbW91bnRTdGF0ZWZ1
bENvbXBvbmVudENhbGxiYWNrcyhyZWYsIGluc3RhbmNlLCBsaWZlY3ljbGUpOworICAgICAgICAg
ICAgZmluZERPTU5vZGVFbmFibGVkICYmIGNvbXBvbmVudFRvRE9NTm9kZU1hcC5zZXQoaW5zdGFu
Y2UsIGRvbSk7CisgICAgICAgICAgICB2Tm9kZS5jaGlsZHJlbiA9IGluc3RhbmNlOworICAgICAg
ICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdmFyIGlucHV0JDEgPSBjcmVhdGVTdGF0
ZWxlc3NDb21wb25lbnRJbnB1dCh2Tm9kZSwgdHlwZSwgcHJvcHMsIGNvbnRleHQpOworICAgICAg
ICAgICAgaHlkcmF0ZShpbnB1dCQxLCBkb20sIGxpZmVjeWNsZSwgY29udGV4dCwgaXNTVkcpOwor
ICAgICAgICAgICAgdk5vZGUuY2hpbGRyZW4gPSBpbnB1dCQxOworICAgICAgICAgICAgdk5vZGUu
ZG9tID0gaW5wdXQkMS5kb207CisgICAgICAgICAgICBtb3VudFN0YXRlbGVzc0NvbXBvbmVudENh
bGxiYWNrcyhyZWYsIGRvbSwgbGlmZWN5Y2xlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBmdW5j
dGlvbiBoeWRyYXRlRWxlbWVudCh2Tm9kZSwgZG9tLCBsaWZlY3ljbGUsIGNvbnRleHQsIGlzU1ZH
KSB7CisgICAgICAgIHZhciB0YWcgPSB2Tm9kZS50eXBlOworICAgICAgICB2YXIgY2hpbGRyZW4g
PSB2Tm9kZS5jaGlsZHJlbjsKKyAgICAgICAgdmFyIHByb3BzID0gdk5vZGUucHJvcHM7CisgICAg
ICAgIHZhciBldmVudHMgPSB2Tm9kZS5ldmVudHM7CisgICAgICAgIHZhciBmbGFncyA9IHZOb2Rl
LmZsYWdzOworICAgICAgICBpZiAoaXNTVkcgfHwgKGZsYWdzICYgMTI4IC8qIFN2Z0VsZW1lbnQg
Ki8pKSB7CisgICAgICAgICAgICBpc1NWRyA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KGRvbS5ub2RlVHlwZSAhPT0gMSB8fCBkb20udGFnTmFtZS50b0xvd2VyQ2FzZSgpICE9PSB0YWcp
IHsKKyAgICAgICAgICAgIHZhciBuZXdEb20gPSBtb3VudEVsZW1lbnQodk5vZGUsIG51bGwsIGxp
ZmVjeWNsZSwgY29udGV4dCwgaXNTVkcpOworICAgICAgICAgICAgdk5vZGUuZG9tID0gbmV3RG9t
OworICAgICAgICAgICAgcmVwbGFjZUNoaWxkKGRvbS5wYXJlbnROb2RlLCBuZXdEb20sIGRvbSk7
CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB2Tm9kZS5kb20gPSBkb207
CisgICAgICAgICAgICBpZiAoY2hpbGRyZW4pIHsKKyAgICAgICAgICAgICAgICBoeWRyYXRlQ2hp
bGRyZW4oY2hpbGRyZW4sIGRvbSwgbGlmZWN5Y2xlLCBjb250ZXh0LCBpc1NWRyk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAoIShmbGFncyAmIDIgLyogSHRtbEVsZW1lbnQgKi8pKSB7
CisgICAgICAgICAgICAgICAgcHJvY2Vzc0VsZW1lbnQoZmxhZ3MsIHZOb2RlLCBkb20pOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZm9yICh2YXIgcHJvcCBpbiBwcm9wcykgeworICAgICAg
ICAgICAgICAgIHBhdGNoUHJvcChwcm9wLCBudWxsLCBwcm9wc1twcm9wXSwgZG9tLCBpc1NWRywg
bGlmZWN5Y2xlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAodmFyIG5hbWUgaW4g
ZXZlbnRzKSB7CisgICAgICAgICAgICAgICAgcGF0Y2hFdmVudChuYW1lLCBudWxsLCBldmVudHNb
bmFtZV0sIGRvbSwgbGlmZWN5Y2xlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KyAgICBmdW5jdGlvbiBoeWRyYXRlQ2hpbGRyZW4oY2hpbGRyZW4sIGRvbSwgbGlmZWN5Y2xlLCBj
b250ZXh0LCBpc1NWRykgeworICAgICAgICBub3JtYWxpc2VDaGlsZE5vZGVzKGRvbSk7CisgICAg
ICAgIHZhciBkb21Ob2RlcyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGRvbS5jaGlsZE5v
ZGVzKTsKKyAgICAgICAgdmFyIGNoaWxkTm9kZUluZGV4ID0gMDsKKyAgICAgICAgaWYgKGlzQXJy
YXkoY2hpbGRyZW4pKSB7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVu
Lmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gY2hpbGRyZW5baV07
CisgICAgICAgICAgICAgICAgaWYgKGlzT2JqZWN0KGNoaWxkKSAmJiAhaXNOdWxsKGNoaWxkKSkg
eworICAgICAgICAgICAgICAgICAgICBoeWRyYXRlKGNoaWxkLCBkb21Ob2Rlc1tjaGlsZE5vZGVJ
bmRleCsrXSwgbGlmZWN5Y2xlLCBjb250ZXh0LCBpc1NWRyk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGlzT2JqZWN0KGNoaWxk
cmVuKSkgeworICAgICAgICAgICAgaHlkcmF0ZShjaGlsZHJlbiwgZG9tLmZpcnN0Q2hpbGQsIGxp
ZmVjeWNsZSwgY29udGV4dCwgaXNTVkcpOworICAgICAgICB9CisgICAgfQorICAgIGZ1bmN0aW9u
IGh5ZHJhdGVUZXh0KHZOb2RlLCBkb20pIHsKKyAgICAgICAgaWYgKGRvbS5ub2RlVHlwZSA9PT0g
MykgeworICAgICAgICAgICAgdmFyIG5ld0RvbSA9IG1vdW50VGV4dCh2Tm9kZSwgbnVsbCk7Cisg
ICAgICAgICAgICB2Tm9kZS5kb20gPSBuZXdEb207CisgICAgICAgICAgICByZXBsYWNlQ2hpbGQo
ZG9tLnBhcmVudE5vZGUsIG5ld0RvbSwgZG9tKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIHZOb2RlLmRvbSA9IGRvbTsKKyAgICAgICAgfQorICAgIH0KKyAgICBmdW5j
dGlvbiBoeWRyYXRlVm9pZCh2Tm9kZSwgZG9tKSB7CisgICAgICAgIHZOb2RlLmRvbSA9IGRvbTsK
KyAgICB9CisgICAgZnVuY3Rpb24gaHlkcmF0ZSh2Tm9kZSwgZG9tLCBsaWZlY3ljbGUsIGNvbnRl
eHQsIGlzU1ZHKSB7CisgICAgICAgIGlmIChmYWxzZSkgeworICAgICAgICAgICAgaWYgKGlzSW52
YWxpZChkb20pKSB7CisgICAgICAgICAgICAgICAgdGhyb3dFcnJvcigiZmFpbGVkIHRvIGh5ZHJh
dGUuIFRoZSBzZXJ2ZXItc2lkZSByZW5kZXIgZG9lc24ndCBtYXRjaCBjbGllbnQgc2lkZS4iKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB2YXIgZmxhZ3MgPSB2Tm9kZS5mbGFn
czsKKyAgICAgICAgaWYgKGZsYWdzICYgMjggLyogQ29tcG9uZW50ICovKSB7CisgICAgICAgICAg
ICByZXR1cm4gaHlkcmF0ZUNvbXBvbmVudCh2Tm9kZSwgZG9tLCBsaWZlY3ljbGUsIGNvbnRleHQs
IGlzU1ZHLCBmbGFncyAmIDQgLyogQ29tcG9uZW50Q2xhc3MgKi8pOworICAgICAgICB9CisgICAg
ICAgIGVsc2UgaWYgKGZsYWdzICYgMzk3MCAvKiBFbGVtZW50ICovKSB7CisgICAgICAgICAgICBy
ZXR1cm4gaHlkcmF0ZUVsZW1lbnQodk5vZGUsIGRvbSwgbGlmZWN5Y2xlLCBjb250ZXh0LCBpc1NW
Ryk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoZmxhZ3MgJiAxIC8qIFRleHQgKi8pIHsK
KyAgICAgICAgICAgIHJldHVybiBoeWRyYXRlVGV4dCh2Tm9kZSwgZG9tKTsKKyAgICAgICAgfQor
ICAgICAgICBlbHNlIGlmIChmbGFncyAmIDQwOTYgLyogVm9pZCAqLykgeworICAgICAgICAgICAg
cmV0dXJuIGh5ZHJhdGVWb2lkKHZOb2RlLCBkb20pOworICAgICAgICB9CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgaWYgKGZhbHNlKSB7CisgICAgICAgICAgICAgICAgdGhyb3dFcnJvcigo
Imh5ZHJhdGUoKSBleHBlY3RzIGEgdmFsaWQgVk5vZGUsIGluc3RlYWQgaXQgcmVjZWl2ZWQgYW4g
b2JqZWN0IHdpdGggdGhlIHR5cGUgXCIiICsgKHR5cGVvZiB2Tm9kZSkgKyAiXCIuIikpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgdGhyb3dFcnJvcigpOworICAgICAgICB9CisgICAgfQor
ICAgIGZ1bmN0aW9uIGh5ZHJhdGVSb290KGlucHV0LCBwYXJlbnREb20sIGxpZmVjeWNsZSkgewor
ICAgICAgICBpZiAocGFyZW50RG9tICYmIHBhcmVudERvbS5ub2RlVHlwZSA9PT0gMSAmJiBwYXJl
bnREb20uZmlyc3RDaGlsZCkgeworICAgICAgICAgICAgaHlkcmF0ZShpbnB1dCwgcGFyZW50RG9t
LmZpcnN0Q2hpbGQsIGxpZmVjeWNsZSwge30sIGZhbHNlKTsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBy
YXRoZXIgdGhhbiB1c2UgYSBNYXAsIGxpa2Ugd2UgZGlkIGJlZm9yZSwgd2UgY2FuIHVzZSBhbiBh
cnJheSBoZXJlCisgICAgLy8gZ2l2ZW4gdGhlcmUgc2hvdWxkbid0IGJlIFRIQVQgbWFueSByb290
cyBvbiB0aGUgcGFnZSwgdGhlIGRpZmZlcmVuY2UKKyAgICAvLyBpbiBwZXJmb3JtYW5jZSBpcyBo
dWdlOiBodHRwczovL2VzYmVuY2guY29tL2JlbmNoLzU4MDJhNjkxMzMwYWIwOTkwMGExYTJkYQor
ICAgIHZhciByb290cyA9IFtdOworICAgIHZhciBjb21wb25lbnRUb0RPTU5vZGVNYXAgPSBuZXcg
TWFwKCk7CisgICAgdmFyIGZpbmRET01Ob2RlRW5hYmxlZCA9IGZhbHNlOworICAgIGZ1bmN0aW9u
IGVuYWJsZUZpbmRET01Ob2RlKCkgeworICAgICAgICBmaW5kRE9NTm9kZUVuYWJsZWQgPSB0cnVl
OworICAgIH0KKyAgICBmdW5jdGlvbiBmaW5kRE9NTm9kZShyZWYpIHsKKyAgICAgICAgaWYgKCFm
aW5kRE9NTm9kZUVuYWJsZWQpIHsKKyAgICAgICAgICAgIGlmIChmYWxzZSkgeworICAgICAgICAg
ICAgICAgIHRocm93RXJyb3IoJ2ZpbmRET01Ob2RlKCkgaGFzIGJlZW4gZGlzYWJsZWQsIHVzZSBl
bmFibGVGaW5kRE9NTm9kZSgpIGVuYWJsZWQgZmluZERPTU5vZGUoKS4gV2FybmluZyB0aGlzIGNh
biBzaWduaWZpY2FudGx5IGltcGFjdCBwZXJmb3JtYW5jZSEnKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHRocm93RXJyb3IoKTsKKyAgICAgICAgfQorICAgICAgICB2YXIgZG9tID0gcmVm
ICYmIHJlZi5ub2RlVHlwZSA/IHJlZiA6IG51bGw7CisgICAgICAgIHJldHVybiBjb21wb25lbnRU
b0RPTU5vZGVNYXAuZ2V0KHJlZikgfHwgZG9tOworICAgIH0KKyAgICBmdW5jdGlvbiBnZXRSb290
KGRvbSkgeworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvb3RzLmxlbmd0aDsgaSsrKSB7
CisgICAgICAgICAgICB2YXIgcm9vdCA9IHJvb3RzW2ldOworICAgICAgICAgICAgaWYgKHJvb3Qu
ZG9tID09PSBkb20pIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcm9vdDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisgICAgZnVuY3Rpb24g
c2V0Um9vdChkb20sIGlucHV0LCBsaWZlY3ljbGUpIHsKKyAgICAgICAgcm9vdHMucHVzaCh7Cisg
ICAgICAgICAgICBkb206IGRvbSwKKyAgICAgICAgICAgIGlucHV0OiBpbnB1dCwKKyAgICAgICAg
ICAgIGxpZmVjeWNsZTogbGlmZWN5Y2xlCisgICAgICAgIH0pOworICAgIH0KKyAgICBmdW5jdGlv
biByZW1vdmVSb290KHJvb3QpIHsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb290cy5s
ZW5ndGg7IGkrKykgeworICAgICAgICAgICAgaWYgKHJvb3RzW2ldID09PSByb290KSB7CisgICAg
ICAgICAgICAgICAgcm9vdHMuc3BsaWNlKGksIDEpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICB2YXIgZG9jdW1lbnRCb2R5ID0g
aXNCcm93c2VyID8gZG9jdW1lbnQuYm9keSA6IG51bGw7CisgICAgZnVuY3Rpb24gcmVuZGVyKGlu
cHV0LCBwYXJlbnREb20pIHsKKyAgICAgICAgaWYgKGRvY3VtZW50Qm9keSA9PT0gcGFyZW50RG9t
KSB7CisgICAgICAgICAgICBpZiAoZmFsc2UpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9y
KCd5b3UgY2Fubm90IHJlbmRlcigpIHRvIHRoZSAiZG9jdW1lbnQuYm9keSIuIFVzZSBhbiBlbXB0
eSBlbGVtZW50IGFzIGEgY29udGFpbmVyIGluc3RlYWQuJyk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICB0aHJvd0Vycm9yKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlucHV0ID09PSBO
T19PUCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHZhciByb290
ID0gZ2V0Um9vdChwYXJlbnREb20pOworICAgICAgICBpZiAoaXNOdWxsKHJvb3QpKSB7CisgICAg
ICAgICAgICB2YXIgbGlmZWN5Y2xlID0gbmV3IExpZmVjeWNsZSgpOworICAgICAgICAgICAgaWYg
KCFpc0ludmFsaWQoaW5wdXQpKSB7CisgICAgICAgICAgICAgICAgaWYgKGlucHV0LmRvbSkgewor
ICAgICAgICAgICAgICAgICAgICBpbnB1dCA9IGNsb25lVk5vZGUoaW5wdXQpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIWh5ZHJhdGVSb290KGlucHV0LCBwYXJlbnRE
b20sIGxpZmVjeWNsZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgbW91bnQoaW5wdXQsIHBhcmVu
dERvbSwgbGlmZWN5Y2xlLCB7fSwgZmFsc2UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBsaWZlY3ljbGUudHJpZ2dlcigpOworICAgICAgICAgICAgICAgIHNldFJvb3QocGFy
ZW50RG9tLCBpbnB1dCwgbGlmZWN5Y2xlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIHZhciBsaWZlY3ljbGUkMSA9IHJvb3QubGlmZWN5Y2xl
OworICAgICAgICAgICAgbGlmZWN5Y2xlJDEubGlzdGVuZXJzID0gW107CisgICAgICAgICAgICBp
ZiAoaXNOdWxsT3JVbmRlZihpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICB1bm1vdW50KHJvb3Qu
aW5wdXQsIHBhcmVudERvbSwgbGlmZWN5Y2xlJDEsIGZhbHNlLCBmYWxzZSwgZmFsc2UpOworICAg
ICAgICAgICAgICAgIHJlbW92ZVJvb3Qocm9vdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoaW5wdXQuZG9tKSB7CisgICAgICAgICAgICAg
ICAgICAgIGlucHV0ID0gY2xvbmVWTm9kZShpbnB1dCk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIHBhdGNoKHJvb3QuaW5wdXQsIGlucHV0LCBwYXJlbnREb20sIGxpZmVjeWNs
ZSQxLCB7fSwgZmFsc2UsIGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxpZmVj
eWNsZSQxLnRyaWdnZXIoKTsKKyAgICAgICAgICAgIHJvb3QuaW5wdXQgPSBpbnB1dDsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoZGV2VG9vbHNTdGF0dXMuY29ubmVjdGVkKSB7CisgICAgICAgICAg
ICBzZW5kUm9vdHMod2luZG93KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBmdW5jdGlvbiBjcmVh
dGVSZW5kZXJlcigpIHsKKyAgICAgICAgdmFyIHBhcmVudERvbTsKKyAgICAgICAgcmV0dXJuIGZ1
bmN0aW9uIHJlbmRlcmVyKGxhc3RJbnB1dCwgbmV4dElucHV0KSB7CisgICAgICAgICAgICBpZiAo
IXBhcmVudERvbSkgeworICAgICAgICAgICAgICAgIHBhcmVudERvbSA9IGxhc3RJbnB1dDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlbmRlcihuZXh0SW5wdXQsIHBhcmVudERvbSk7Cisg
ICAgICAgIH07CisgICAgfQorCisgICAgZnVuY3Rpb24gbGlua0V2ZW50KGRhdGEsIGV2ZW50KSB7
CisgICAgICAgIHJldHVybiB7IGRhdGE6IGRhdGEsIGV2ZW50OiBldmVudCB9OworICAgIH0KKwor
ICAgIGlmIChpc0Jyb3dzZXIpIHsKKyAgICAgICAgd2luZG93LnByb2Nlc3MgPSB7CisgICAgICAg
ICAgICBlbnY6IHsKKyAgICAgICAgICAgICAgICBOT0RFX0VOVjogJ2RldmVsb3BtZW50JworICAg
ICAgICAgICAgfQorICAgICAgICB9OworICAgICAgICBpbml0RGV2VG9vbHNIb29rcyh3aW5kb3cp
OworICAgIH0KKworICAgIGlmIChmYWxzZSkgeworICAgICAgICB2YXIgdGVzdEZ1bmMgPSBmdW5j
dGlvbiB0ZXN0Rm4oKSB7fTsKKyAgICAgICAgd2FybmluZygKKyAgICAgICAgICAgICh0ZXN0RnVu
Yy5uYW1lIHx8IHRlc3RGdW5jLnRvU3RyaW5nKCkpLmluZGV4T2YoJ3Rlc3RGbicpICE9PSAtMSwK
KyAgICAgICAgICAgICdJdCBsb29rcyBsaWtlIHlvdVwncmUgdXNpbmcgYSBtaW5pZmllZCBjb3B5
IG9mIHRoZSBkZXZlbG9wbWVudCBidWlsZCAnICsKKyAgICAgICAgICAgICdvZiBJbmZlcm5vLiBX
aGVuIGRlcGxveWluZyBJbmZlcm5vIGFwcHMgdG8gcHJvZHVjdGlvbiwgbWFrZSBzdXJlIHRvIHVz
ZSAnICsKKyAgICAgICAgICAgICd0aGUgcHJvZHVjdGlvbiBidWlsZCB3aGljaCBza2lwcyBkZXZl
bG9wbWVudCB3YXJuaW5ncyBhbmQgaXMgZmFzdGVyLiAnICsKKyAgICAgICAgICAgICdTZWUgaHR0
cDovL2luZmVybm9qcy5vcmcgZm9yIG1vcmUgZGV0YWlscy4nCisgICAgICAgICk7CisgICAgfQor
CisgICAgLy8gd2UgZHVwbGljYXRlIGl0IHNvIGl0IHBsYXlzIG5pY2VseSB3aXRoIGRpZmZlcmVu
dCBtb2R1bGUgbG9hZGluZyBzeXN0ZW1zCisgICAgdmFyIGluZGV4ID0geworICAgICAgICBsaW5r
RXZlbnQ6IGxpbmtFdmVudCwKKyAgICAgICAgLy8gY29yZSBzaGFwZXMKKyAgICAgICAgY3JlYXRl
Vk5vZGU6IGNyZWF0ZVZOb2RlLAorCisgICAgICAgIC8vIGNsb25pbmcKKyAgICAgICAgY2xvbmVW
Tm9kZTogY2xvbmVWTm9kZSwKKworICAgICAgICAvLyB1c2VkIHRvIHNoYXJlZCBjb21tb24gaXRl
bXMgYmV0d2VlbiBJbmZlcm5vIGxpYnMKKyAgICAgICAgTk9fT1A6IE5PX09QLAorICAgICAgICBF
TVBUWV9PQko6IEVNUFRZX09CSiwKKworICAgICAgICAvL0RPTQorICAgICAgICByZW5kZXI6IHJl
bmRlciwKKyAgICAgICAgZmluZERPTU5vZGU6IGZpbmRET01Ob2RlLAorICAgICAgICBjcmVhdGVS
ZW5kZXJlcjogY3JlYXRlUmVuZGVyZXIsCisgICAgICAgIGRpc2FibGVSZWN5Y2xpbmc6IGRpc2Fi
bGVSZWN5Y2xpbmcsCisgICAgICAgIGVuYWJsZUZpbmRET01Ob2RlOiBlbmFibGVGaW5kRE9NTm9k
ZQorICAgIH07CisKKyAgICBleHBvcnRzWydkZWZhdWx0J10gPSBpbmRleDsKKyAgICBleHBvcnRz
LmxpbmtFdmVudCA9IGxpbmtFdmVudDsKKyAgICBleHBvcnRzLmNyZWF0ZVZOb2RlID0gY3JlYXRl
Vk5vZGU7CisgICAgZXhwb3J0cy5jbG9uZVZOb2RlID0gY2xvbmVWTm9kZTsKKyAgICBleHBvcnRz
Lk5PX09QID0gTk9fT1A7CisgICAgZXhwb3J0cy5FTVBUWV9PQkogPSBFTVBUWV9PQko7CisgICAg
ZXhwb3J0cy5yZW5kZXIgPSByZW5kZXI7CisgICAgZXhwb3J0cy5maW5kRE9NTm9kZSA9IGZpbmRE
T01Ob2RlOworICAgIGV4cG9ydHMuY3JlYXRlUmVuZGVyZXIgPSBjcmVhdGVSZW5kZXJlcjsKKyAg
ICBleHBvcnRzLmRpc2FibGVSZWN5Y2xpbmcgPSBkaXNhYmxlUmVjeWNsaW5nOworICAgIGV4cG9y
dHMuZW5hYmxlRmluZERPTU5vZGUgPSBlbmFibGVGaW5kRE9NTm9kZTsKKworICAgIE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7CisK
KyAgICB9KSkpOworCisKKy8qKiovIH0sCisvKiAzICovCisvKioqLyBmdW5jdGlvbihtb2R1bGUs
IGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworICAgIG1vZHVsZS5leHBvcnRzID0g
X193ZWJwYWNrX3JlcXVpcmVfXyg0KTsKKworCisvKioqLyB9LAorLyogNCAqLworLyoqKi8gZnVu
Y3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyAgICAvKiEK
KyAgICAgKiBpbmZlcm5vLWNvbXBvbmVudCB2MS4wLjAtYmV0YTMyCisgICAgICogKGMpIDIwMTYg
RG9taW5pYyBHYW5uYXdheQorICAgICAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4K
KyAgICAgKi8KKyAgICAoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkgeworICAgICAgICAgdHJ1
ZSA/IG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShfX3dlYnBhY2tfcmVxdWlyZV9fKDIpKSA6Cisg
ICAgICAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmlu
ZShbJ2luZmVybm8nXSwgZmFjdG9yeSkgOgorICAgICAgICAoZ2xvYmFsLkluZmVybm8gPSBnbG9i
YWwuSW5mZXJubyB8fCB7fSwgZ2xvYmFsLkluZmVybm8uQ29tcG9uZW50ID0gZmFjdG9yeShnbG9i
YWwuSW5mZXJubykpOworICAgIH0odGhpcywgKGZ1bmN0aW9uIChpbmZlcm5vKSB7ICd1c2Ugc3Ry
aWN0JzsKKworICAgIHZhciBFUlJPUl9NU0cgPSAnYSBydW50aW1lIGVycm9yIG9jY3VyZWQhIFVz
ZSBJbmZlcm5vIGluIGRldmVsb3BtZW50IGVudmlyb25tZW50IHRvIGZpbmQgdGhlIGVycm9yLic7
CisKKworICAgIC8vIHRoaXMgaXMgTVVDSCBmYXN0ZXIgdGhhbiAuY29uc3RydWN0b3IgPT09IEFy
cmF5IGFuZCBpbnN0YW5jZW9mIEFycmF5CisgICAgLy8gaW4gTm9kZSA3IGFuZCB0aGUgbGF0ZXIg
dmVyc2lvbnMgb2YgVjgsIHNsb3dlciBpbiBvbGRlciB2ZXJzaW9ucyB0aG91Z2gKKyAgICB2YXIg
aXNBcnJheSA9IEFycmF5LmlzQXJyYXk7CisKKworICAgIGZ1bmN0aW9uIGlzTnVsbE9yVW5kZWYo
b2JqKSB7CisgICAgICAgIHJldHVybiBpc1VuZGVmaW5lZChvYmopIHx8IGlzTnVsbChvYmopOwor
ICAgIH0KKyAgICBmdW5jdGlvbiBpc0ludmFsaWQob2JqKSB7CisgICAgICAgIHJldHVybiBpc051
bGwob2JqKSB8fCBvYmogPT09IGZhbHNlIHx8IGlzVHJ1ZShvYmopIHx8IGlzVW5kZWZpbmVkKG9i
aik7CisgICAgfQorICAgIGZ1bmN0aW9uIGlzRnVuY3Rpb24ob2JqKSB7CisgICAgICAgIHJldHVy
biB0eXBlb2Ygb2JqID09PSAnZnVuY3Rpb24nOworICAgIH0KKworCisKKyAgICBmdW5jdGlvbiBp
c051bGwob2JqKSB7CisgICAgICAgIHJldHVybiBvYmogPT09IG51bGw7CisgICAgfQorICAgIGZ1
bmN0aW9uIGlzVHJ1ZShvYmopIHsKKyAgICAgICAgcmV0dXJuIG9iaiA9PT0gdHJ1ZTsKKyAgICB9
CisgICAgZnVuY3Rpb24gaXNVbmRlZmluZWQob2JqKSB7CisgICAgICAgIHJldHVybiBvYmogPT09
IHVuZGVmaW5lZDsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB0aHJvd0Vycm9yKG1lc3NhZ2UpIHsK
KyAgICAgICAgaWYgKCFtZXNzYWdlKSB7CisgICAgICAgICAgICBtZXNzYWdlID0gRVJST1JfTVNH
OworICAgICAgICB9CisgICAgICAgIHRocm93IG5ldyBFcnJvcigoIkluZmVybm8gRXJyb3I6ICIg
KyBtZXNzYWdlKSk7CisgICAgfQorCisgICAgdmFyIExpZmVjeWNsZSA9IGZ1bmN0aW9uIExpZmVj
eWNsZSgpIHsKKyAgICAgICAgdGhpcy5saXN0ZW5lcnMgPSBbXTsKKyAgICAgICAgdGhpcy5mYXN0
VW5tb3VudCA9IHRydWU7CisgICAgfTsKKyAgICBMaWZlY3ljbGUucHJvdG90eXBlLmFkZExpc3Rl
bmVyID0gZnVuY3Rpb24gYWRkTGlzdGVuZXIgKGNhbGxiYWNrKSB7CisgICAgICAgIHRoaXMubGlz
dGVuZXJzLnB1c2goY2FsbGJhY2spOworICAgIH07CisgICAgTGlmZWN5Y2xlLnByb3RvdHlwZS50
cmlnZ2VyID0gZnVuY3Rpb24gdHJpZ2dlciAoKSB7CisgICAgICAgICAgICB2YXIgdGhpcyQxID0g
dGhpczsKKworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGlzdGVuZXJzLmxlbmd0
aDsgaSsrKSB7CisgICAgICAgICAgICB0aGlzJDEubGlzdGVuZXJzW2ldKCk7CisgICAgICAgIH0K
KyAgICB9OworCisgICAgdmFyIG5vT3AgPSBFUlJPUl9NU0c7CisgICAgaWYgKGZhbHNlKSB7Cisg
ICAgICAgIG5vT3AgPSAnSW5mZXJubyBFcnJvcjogQ2FuIG9ubHkgdXBkYXRlIGEgbW91bnRlZCBv
ciBtb3VudGluZyBjb21wb25lbnQuIFRoaXMgdXN1YWxseSBtZWFucyB5b3UgY2FsbGVkIHNldFN0
YXRlKCkgb3IgZm9yY2VVcGRhdGUoKSBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LiBUaGlzIGlz
IGEgbm8tb3AuJzsKKyAgICB9CisgICAgdmFyIGNvbXBvbmVudENhbGxiYWNrUXVldWUgPSBuZXcg
TWFwKCk7CisgICAgLy8gd2hlbiBhIGNvbXBvbmVudHMgcm9vdCBWTm9kZSBpcyBhbHNvIGEgY29t
cG9uZW50LCB3ZSBjYW4gcnVuIGludG8gaXNzdWVzCisgICAgLy8gdGhpcyB3aWxsIHJlY3Vyc2l2
ZWx5IGxvb2sgZm9yIHZOb2RlLnBhcmVudE5vZGUgaWYgdGhlIFZOb2RlIGlzIGEgY29tcG9uZW50
CisgICAgZnVuY3Rpb24gdXBkYXRlUGFyZW50Q29tcG9uZW50Vk5vZGVzKHZOb2RlLCBkb20pIHsK
KyAgICAgICAgaWYgKHZOb2RlLmZsYWdzICYgMjggLyogQ29tcG9uZW50ICovKSB7CisgICAgICAg
ICAgICB2YXIgcGFyZW50Vk5vZGUgPSB2Tm9kZS5wYXJlbnRWTm9kZTsKKyAgICAgICAgICAgIGlm
IChwYXJlbnRWTm9kZSkgeworICAgICAgICAgICAgICAgIHBhcmVudFZOb2RlLmRvbSA9IGRvbTsK
KyAgICAgICAgICAgICAgICB1cGRhdGVQYXJlbnRDb21wb25lbnRWTm9kZXMocGFyZW50Vk5vZGUs
IGRvbSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgLy8gdGhpcyBpcyBp
biBzaGFwZXMgdG9vLCBidXQgd2UgZG9uJ3Qgd2FudCB0byBpbXBvcnQgZnJvbSBzaGFwZXMgYXMg
aXQgd2lsbCBwdWxsIGluIGEgZHVwbGljYXRlIG9mIGNyZWF0ZVZOb2RlCisgICAgZnVuY3Rpb24g
Y3JlYXRlVm9pZFZOb2RlKCkgeworICAgICAgICByZXR1cm4gaW5mZXJuby5jcmVhdGVWTm9kZSg0
MDk2IC8qIFZvaWQgKi8pOworICAgIH0KKyAgICBmdW5jdGlvbiBhZGRUb1F1ZXVlKGNvbXBvbmVu
dCwgZm9yY2UsIGNhbGxiYWNrKSB7CisgICAgICAgIC8vIFRPRE8gdGhpcyBmdW5jdGlvbiBuZWVk
cyB0byBiZSByZXZpc2VkIGFuZCBpbXByb3ZlZCBvbgorICAgICAgICB2YXIgcXVldWUgPSBjb21w
b25lbnRDYWxsYmFja1F1ZXVlLmdldChjb21wb25lbnQpOworICAgICAgICBpZiAoIXF1ZXVlKSB7
CisgICAgICAgICAgICBxdWV1ZSA9IFtdOworICAgICAgICAgICAgY29tcG9uZW50Q2FsbGJhY2tR
dWV1ZS5zZXQoY29tcG9uZW50LCBxdWV1ZSk7CisgICAgICAgICAgICBQcm9taXNlLnJlc29sdmUo
KS50aGVuKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICBhcHBseVN0YXRlKGNvbXBvbmVu
dCwgZm9yY2UsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBxdWV1ZS5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgcXVl
dWVbaV0oKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgICAgIGNvbXBvbmVudENhbGxiYWNrUXVldWUuZGVsZXRlKGNvbXBvbmVudCk7Cisg
ICAgICAgICAgICAgICAgY29tcG9uZW50Ll9wcm9jZXNzaW5nU2V0U3RhdGUgPSBmYWxzZTsKKyAg
ICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgICAgIGlmIChjYWxsYmFjaykgeworICAgICAg
ICAgICAgcXVldWUucHVzaChjYWxsYmFjayk7CisgICAgICAgIH0KKyAgICB9CisgICAgZnVuY3Rp
b24gcXVldWVTdGF0ZUNoYW5nZXMoY29tcG9uZW50LCBuZXdTdGF0ZSwgY2FsbGJhY2spIHsKKyAg
ICAgICAgaWYgKGlzRnVuY3Rpb24obmV3U3RhdGUpKSB7CisgICAgICAgICAgICBuZXdTdGF0ZSA9
IG5ld1N0YXRlKGNvbXBvbmVudC5zdGF0ZSk7CisgICAgICAgIH0KKyAgICAgICAgZm9yICh2YXIg
c3RhdGVLZXkgaW4gbmV3U3RhdGUpIHsKKyAgICAgICAgICAgIGNvbXBvbmVudC5fcGVuZGluZ1N0
YXRlW3N0YXRlS2V5XSA9IG5ld1N0YXRlW3N0YXRlS2V5XTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAoIWNvbXBvbmVudC5fcGVuZGluZ1NldFN0YXRlKSB7CisgICAgICAgICAgICBpZiAoY29tcG9u
ZW50Ll9wcm9jZXNzaW5nU2V0U3RhdGUgfHwgY2FsbGJhY2spIHsKKyAgICAgICAgICAgICAgICBh
ZGRUb1F1ZXVlKGNvbXBvbmVudCwgZmFsc2UsIGNhbGxiYWNrKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGNvbXBvbmVudC5fcGVuZGluZ1NldFN0
YXRlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBjb21wb25lbnQuX3Byb2Nlc3NpbmdTZXRTdGF0
ZSA9IHRydWU7CisgICAgICAgICAgICAgICAgYXBwbHlTdGF0ZShjb21wb25lbnQsIGZhbHNlLCBj
YWxsYmFjayk7CisgICAgICAgICAgICAgICAgY29tcG9uZW50Ll9wcm9jZXNzaW5nU2V0U3RhdGUg
PSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgIGNvbXBvbmVudC5zdGF0ZSA9IE9iamVjdC5hc3NpZ24oe30sIGNvbXBvbmVudC5zdGF0
ZSwgY29tcG9uZW50Ll9wZW5kaW5nU3RhdGUpOworICAgICAgICAgICAgY29tcG9uZW50Ll9wZW5k
aW5nU3RhdGUgPSB7fTsKKyAgICAgICAgfQorICAgIH0KKyAgICBmdW5jdGlvbiBhcHBseVN0YXRl
KGNvbXBvbmVudCwgZm9yY2UsIGNhbGxiYWNrKSB7CisgICAgICAgIGlmICgoIWNvbXBvbmVudC5f
ZGVmZXJTZXRTdGF0ZSB8fCBmb3JjZSkgJiYgIWNvbXBvbmVudC5fYmxvY2tSZW5kZXIpIHsKKyAg
ICAgICAgICAgIGNvbXBvbmVudC5fcGVuZGluZ1NldFN0YXRlID0gZmFsc2U7CisgICAgICAgICAg
ICB2YXIgcGVuZGluZ1N0YXRlID0gY29tcG9uZW50Ll9wZW5kaW5nU3RhdGU7CisgICAgICAgICAg
ICB2YXIgcHJldlN0YXRlID0gY29tcG9uZW50LnN0YXRlOworICAgICAgICAgICAgdmFyIG5leHRT
dGF0ZSA9IE9iamVjdC5hc3NpZ24oe30sIHByZXZTdGF0ZSwgcGVuZGluZ1N0YXRlKTsKKyAgICAg
ICAgICAgIHZhciBwcm9wcyA9IGNvbXBvbmVudC5wcm9wczsKKyAgICAgICAgICAgIHZhciBjb250
ZXh0ID0gY29tcG9uZW50LmNvbnRleHQ7CisgICAgICAgICAgICBjb21wb25lbnQuX3BlbmRpbmdT
dGF0ZSA9IHt9OworICAgICAgICAgICAgdmFyIG5leHRJbnB1dCA9IGNvbXBvbmVudC5fdXBkYXRl
Q29tcG9uZW50KHByZXZTdGF0ZSwgbmV4dFN0YXRlLCBwcm9wcywgcHJvcHMsIGNvbnRleHQsIGZv
cmNlKTsKKyAgICAgICAgICAgIHZhciBkaWRVcGRhdGUgPSB0cnVlOworICAgICAgICAgICAgaWYg
KGlzSW52YWxpZChuZXh0SW5wdXQpKSB7CisgICAgICAgICAgICAgICAgbmV4dElucHV0ID0gY3Jl
YXRlVm9pZFZOb2RlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChpc0Fy
cmF5KG5leHRJbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoZmFsc2UpIHsKKyAgICAgICAg
ICAgICAgICAgICAgdGhyb3dFcnJvcignYSB2YWxpZCBJbmZlcm5vIFZOb2RlIChvciBudWxsKSBt
dXN0IGJlIHJldHVybmVkIGZyb20gYSBjb21wb25lbnQgcmVuZGVyLiBZb3UgbWF5IGhhdmUgcmV0
dXJuZWQgYW4gYXJyYXkgb3IgYW4gaW52YWxpZCBvYmplY3QuJyk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIHRocm93RXJyb3IoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGVsc2UgaWYgKG5leHRJbnB1dCA9PT0gaW5mZXJuby5OT19PUCkgeworICAgICAgICAgICAg
ICAgIG5leHRJbnB1dCA9IGNvbXBvbmVudC5fbGFzdElucHV0OworICAgICAgICAgICAgICAgIGRp
ZFVwZGF0ZSA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIGxhc3RJbnB1
dCA9IGNvbXBvbmVudC5fbGFzdElucHV0OworICAgICAgICAgICAgdmFyIHBhcmVudERvbSA9IGxh
c3RJbnB1dC5kb20ucGFyZW50Tm9kZTsKKyAgICAgICAgICAgIGNvbXBvbmVudC5fbGFzdElucHV0
ID0gbmV4dElucHV0OworICAgICAgICAgICAgaWYgKGRpZFVwZGF0ZSkgeworICAgICAgICAgICAg
ICAgIHZhciBzdWJMaWZlY3ljbGUgPSBjb21wb25lbnQuX2xpZmVjeWNsZTsKKyAgICAgICAgICAg
ICAgICBpZiAoIXN1YkxpZmVjeWNsZSkgeworICAgICAgICAgICAgICAgICAgICBzdWJMaWZlY3lj
bGUgPSBuZXcgTGlmZWN5Y2xlKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBzdWJMaWZlY3ljbGUubGlzdGVuZXJzID0gW107
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNvbXBvbmVudC5fbGlmZWN5Y2xl
ID0gc3ViTGlmZWN5Y2xlOworICAgICAgICAgICAgICAgIHZhciBjaGlsZENvbnRleHQgPSBjb21w
b25lbnQuZ2V0Q2hpbGRDb250ZXh0KCk7CisgICAgICAgICAgICAgICAgaWYgKCFpc051bGxPclVu
ZGVmKGNoaWxkQ29udGV4dCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2hpbGRDb250ZXh0ID0g
T2JqZWN0LmFzc2lnbih7fSwgY29udGV4dCwgY29tcG9uZW50Ll9jaGlsZENvbnRleHQsIGNoaWxk
Q29udGV4dCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICBjaGlsZENvbnRleHQgPSBPYmplY3QuYXNzaWduKHt9LCBjb250ZXh0
LCBjb21wb25lbnQuX2NoaWxkQ29udGV4dCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGNvbXBvbmVudC5fcGF0Y2gobGFzdElucHV0LCBuZXh0SW5wdXQsIHBhcmVudERvbSwg
c3ViTGlmZWN5Y2xlLCBjaGlsZENvbnRleHQsIGNvbXBvbmVudC5faXNTVkcsIGZhbHNlKTsKKyAg
ICAgICAgICAgICAgICBzdWJMaWZlY3ljbGUudHJpZ2dlcigpOworICAgICAgICAgICAgICAgIGNv
bXBvbmVudC5jb21wb25lbnREaWRVcGRhdGUocHJvcHMsIHByZXZTdGF0ZSk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICB2YXIgdk5vZGUgPSBjb21wb25lbnQuX3ZOb2RlOworICAgICAgICAg
ICAgdmFyIGRvbSA9IHZOb2RlLmRvbSA9IG5leHRJbnB1dC5kb207CisgICAgICAgICAgICB2YXIg
Y29tcG9uZW50VG9ET01Ob2RlTWFwID0gY29tcG9uZW50Ll9jb21wb25lbnRUb0RPTU5vZGVNYXA7
CisgICAgICAgICAgICBjb21wb25lbnRUb0RPTU5vZGVNYXAgJiYgY29tcG9uZW50VG9ET01Ob2Rl
TWFwLnNldChjb21wb25lbnQsIG5leHRJbnB1dC5kb20pOworICAgICAgICAgICAgdXBkYXRlUGFy
ZW50Q29tcG9uZW50Vk5vZGVzKHZOb2RlLCBkb20pOworICAgICAgICAgICAgaWYgKCFpc051bGxP
clVuZGVmKGNhbGxiYWNrKSkgeworICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgdmFyIENvbXBvbmVudCQxID0gZnVuY3Rpb24g
Q29tcG9uZW50JDEocHJvcHMsIGNvbnRleHQpIHsKKyAgICAgICAgdGhpcy5zdGF0ZSA9IHt9Owor
ICAgICAgICB0aGlzLnJlZnMgPSB7fTsKKyAgICAgICAgdGhpcy5fcHJvY2Vzc2luZ1NldFN0YXRl
ID0gZmFsc2U7CisgICAgICAgIHRoaXMuX2Jsb2NrUmVuZGVyID0gZmFsc2U7CisgICAgICAgIHRo
aXMuX2lnbm9yZVNldFN0YXRlID0gZmFsc2U7CisgICAgICAgIHRoaXMuX2Jsb2NrU2V0U3RhdGUg
PSBmYWxzZTsKKyAgICAgICAgdGhpcy5fZGVmZXJTZXRTdGF0ZSA9IGZhbHNlOworICAgICAgICB0
aGlzLl9wZW5kaW5nU2V0U3RhdGUgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fcGVuZGluZ1N0YXRl
ID0ge307CisgICAgICAgIHRoaXMuX2xhc3RJbnB1dCA9IG51bGw7CisgICAgICAgIHRoaXMuX3ZO
b2RlID0gbnVsbDsKKyAgICAgICAgdGhpcy5fdW5tb3VudGVkID0gdHJ1ZTsKKyAgICAgICAgdGhp
cy5fZGV2VG9vbHNTdGF0dXMgPSBudWxsOworICAgICAgICB0aGlzLl9kZXZUb29sc0lkID0gbnVs
bDsKKyAgICAgICAgdGhpcy5fbGlmZWN5Y2xlID0gbnVsbDsKKyAgICAgICAgdGhpcy5fY2hpbGRD
b250ZXh0ID0gbnVsbDsKKyAgICAgICAgdGhpcy5fcGF0Y2ggPSBudWxsOworICAgICAgICB0aGlz
Ll9pc1NWRyA9IGZhbHNlOworICAgICAgICB0aGlzLl9jb21wb25lbnRUb0RPTU5vZGVNYXAgPSBu
dWxsOworICAgICAgICAvKiogQHR5cGUge29iamVjdH0gKi8KKyAgICAgICAgdGhpcy5wcm9wcyA9
IHByb3BzIHx8IGluZmVybm8uRU1QVFlfT0JKOworICAgICAgICAvKiogQHR5cGUge29iamVjdH0g
Ki8KKyAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dCB8fCB7fTsKKyAgICAgICAgaWYgKCF0
aGlzLmNvbXBvbmVudERpZE1vdW50KSB7CisgICAgICAgICAgICB0aGlzLmNvbXBvbmVudERpZE1v
dW50ID0gbnVsbDsKKyAgICAgICAgfQorICAgIH07CisgICAgQ29tcG9uZW50JDEucHJvdG90eXBl
LnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlciAobmV4dFByb3BzLCBuZXh0U3RhdGUsIG5leHRDb250
ZXh0KSB7CisgICAgfTsKKyAgICBDb21wb25lbnQkMS5wcm90b3R5cGUuZm9yY2VVcGRhdGUgPSBm
dW5jdGlvbiBmb3JjZVVwZGF0ZSAoY2FsbGJhY2spIHsKKyAgICAgICAgaWYgKHRoaXMuX3VubW91
bnRlZCkgeworICAgICAgICAgICAgdGhyb3cgRXJyb3Iobm9PcCk7CisgICAgICAgIH0KKyAgICAg
ICAgYXBwbHlTdGF0ZSh0aGlzLCB0cnVlLCBjYWxsYmFjayk7CisgICAgfTsKKyAgICBDb21wb25l
bnQkMS5wcm90b3R5cGUuc2V0U3RhdGUgPSBmdW5jdGlvbiBzZXRTdGF0ZSAobmV3U3RhdGUsIGNh
bGxiYWNrKSB7CisgICAgICAgIGlmICh0aGlzLl91bm1vdW50ZWQpIHsKKyAgICAgICAgICAgIHRo
cm93IEVycm9yKG5vT3ApOworICAgICAgICB9CisgICAgICAgIGlmICghdGhpcy5fYmxvY2tTZXRT
dGF0ZSkgeworICAgICAgICAgICAgaWYgKCF0aGlzLl9pZ25vcmVTZXRTdGF0ZSkgeworICAgICAg
ICAgICAgICAgIHF1ZXVlU3RhdGVDaGFuZ2VzKHRoaXMsIG5ld1N0YXRlLCBjYWxsYmFjayk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiAo
ZmFsc2UpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKCdjYW5ub3QgdXBkYXRlIHN0YXRl
IHZpYSBzZXRTdGF0ZSgpIGluIGNvbXBvbmVudFdpbGxVcGRhdGUoKS4nKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHRocm93RXJyb3IoKTsKKyAgICAgICAgfQorICAgIH07CisgICAgQ29t
cG9uZW50JDEucHJvdG90eXBlLmNvbXBvbmVudFdpbGxNb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVu
dFdpbGxNb3VudCAoKSB7CisgICAgfTsKKyAgICBDb21wb25lbnQkMS5wcm90b3R5cGUuY29tcG9u
ZW50RGlkTW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCAoKSB7CisgICAgfTsKKyAg
ICBDb21wb25lbnQkMS5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbiBj
b21wb25lbnRXaWxsVW5tb3VudCAoKSB7CisgICAgfTsKKyAgICBDb21wb25lbnQkMS5wcm90b3R5
cGUuY29tcG9uZW50RGlkVXBkYXRlID0gZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlIChwcmV2
UHJvcHMsIHByZXZTdGF0ZSwgcHJldkNvbnRleHQpIHsKKyAgICB9OworICAgIENvbXBvbmVudCQx
LnByb3RvdHlwZS5zaG91bGRDb21wb25lbnRVcGRhdGUgPSBmdW5jdGlvbiBzaG91bGRDb21wb25l
bnRVcGRhdGUgKG5leHRQcm9wcywgbmV4dFN0YXRlLCBjb250ZXh0KSB7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH07CisgICAgQ29tcG9uZW50JDEucHJvdG90eXBlLmNvbXBvbmVudFdpbGxS
ZWNlaXZlUHJvcHMgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIChuZXh0UHJv
cHMsIGNvbnRleHQpIHsKKyAgICB9OworICAgIENvbXBvbmVudCQxLnByb3RvdHlwZS5jb21wb25l
bnRXaWxsVXBkYXRlID0gZnVuY3Rpb24gY29tcG9uZW50V2lsbFVwZGF0ZSAobmV4dFByb3BzLCBu
ZXh0U3RhdGUsIG5leHRDb250ZXh0KSB7CisgICAgfTsKKyAgICBDb21wb25lbnQkMS5wcm90b3R5
cGUuZ2V0Q2hpbGRDb250ZXh0ID0gZnVuY3Rpb24gZ2V0Q2hpbGRDb250ZXh0ICgpIHsKKyAgICB9
OworICAgIENvbXBvbmVudCQxLnByb3RvdHlwZS5fdXBkYXRlQ29tcG9uZW50ID0gZnVuY3Rpb24g
X3VwZGF0ZUNvbXBvbmVudCAocHJldlN0YXRlLCBuZXh0U3RhdGUsIHByZXZQcm9wcywgbmV4dFBy
b3BzLCBjb250ZXh0LCBmb3JjZSkgeworICAgICAgICBpZiAodGhpcy5fdW5tb3VudGVkID09PSB0
cnVlKSB7CisgICAgICAgICAgICBpZiAoZmFsc2UpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vy
cm9yKG5vT3ApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhyb3dFcnJvcigpOworICAg
ICAgICB9CisgICAgICAgIGlmICgocHJldlByb3BzICE9PSBuZXh0UHJvcHMgfHwgbmV4dFByb3Bz
ID09PSBpbmZlcm5vLkVNUFRZX09CSikgfHwgcHJldlN0YXRlICE9PSBuZXh0U3RhdGUgfHwgZm9y
Y2UpIHsKKyAgICAgICAgICAgIGlmIChwcmV2UHJvcHMgIT09IG5leHRQcm9wcyB8fCBuZXh0UHJv
cHMgPT09IGluZmVybm8uRU1QVFlfT0JKKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fYmxvY2tS
ZW5kZXIgPSB0cnVlOworICAgICAgICAgICAgICAgIHRoaXMuY29tcG9uZW50V2lsbFJlY2VpdmVQ
cm9wcyhuZXh0UHJvcHMsIGNvbnRleHQpOworICAgICAgICAgICAgICAgIHRoaXMuX2Jsb2NrUmVu
ZGVyID0gZmFsc2U7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3BlbmRpbmdTZXRTdGF0ZSkg
eworICAgICAgICAgICAgICAgICAgICBuZXh0U3RhdGUgPSBPYmplY3QuYXNzaWduKHt9LCBuZXh0
U3RhdGUsIHRoaXMuX3BlbmRpbmdTdGF0ZSk7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Bl
bmRpbmdTZXRTdGF0ZSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICB0aGlzLl9wZW5kaW5n
U3RhdGUgPSB7fTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICB2YXIgc2hvdWxkVXBkYXRlID0gdGhpcy5zaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3Bz
LCBuZXh0U3RhdGUsIGNvbnRleHQpOworICAgICAgICAgICAgaWYgKHNob3VsZFVwZGF0ZSAhPT0g
ZmFsc2UgfHwgZm9yY2UpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9ibG9ja1NldFN0YXRlID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICB0aGlzLmNvbXBvbmVudFdpbGxVcGRhdGUobmV4dFByb3Bz
LCBuZXh0U3RhdGUsIGNvbnRleHQpOworICAgICAgICAgICAgICAgIHRoaXMuX2Jsb2NrU2V0U3Rh
dGUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB0aGlzLnByb3BzID0gbmV4dFByb3BzOworICAg
ICAgICAgICAgICAgIHZhciBzdGF0ZSA9IHRoaXMuc3RhdGUgPSBuZXh0U3RhdGU7CisgICAgICAg
ICAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDsKKyAgICAgICAgICAgICAgICB0aGlzLl9i
ZWZvcmVSZW5kZXIgJiYgdGhpcy5fYmVmb3JlUmVuZGVyKCk7CisgICAgICAgICAgICAgICAgdmFy
IHJlbmRlciA9IHRoaXMucmVuZGVyKG5leHRQcm9wcywgc3RhdGUsIGNvbnRleHQpOworICAgICAg
ICAgICAgICAgIHRoaXMuX2FmdGVyUmVuZGVyICYmIHRoaXMuX2FmdGVyUmVuZGVyKCk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHJlbmRlcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gaW5mZXJuby5OT19PUDsKKyAgICB9OworCisgICAgcmV0dXJuIENvbXBvbmVu
dCQxOworCisgICAgfSkpKTsKKworCisvKioqLyB9LAorLyogNSAqLworLyoqKi8gZnVuY3Rpb24o
bW9kdWxlLCBleHBvcnRzKSB7CisKKyAgICAndXNlIHN0cmljdCc7CisKKyAgICBleHBvcnRzLl9f
ZXNNb2R1bGUgPSB0cnVlOworICAgIGV4cG9ydHMucmVhZCA9IHJlYWQ7CisgICAgZXhwb3J0cy5h
c3NpZ24gPSBhc3NpZ247CisgICAgZXhwb3J0cy5pc0VxdWFsID0gaXNFcXVhbDsKKyAgICAvKioK
KyAgICAgKiBTaGFyZWQgZnVuY3MvdmFsdWVzCisgICAgICovCisKKyAgICB2YXIgRU5URVIgPSBl
eHBvcnRzLkVOVEVSID0gMTM7CisgICAgdmFyIEVTQ0FQRSA9IGV4cG9ydHMuRVNDQVBFID0gMjc7
CisKKyAgICB2YXIgZmlsdGVycyA9IGV4cG9ydHMuZmlsdGVycyA9IHsKKyAgICAgICAgYWxsOiBm
dW5jdGlvbiBhbGwodCkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0sCisg
ICAgICAgIGFjdGl2ZTogZnVuY3Rpb24gYWN0aXZlKHQpIHsKKyAgICAgICAgICAgIHJldHVybiAh
dC5jb21wbGV0ZWQ7CisgICAgICAgIH0sCisgICAgICAgIGNvbXBsZXRlZDogZnVuY3Rpb24gY29t
cGxldGVkKHQpIHsKKyAgICAgICAgICAgIHJldHVybiB0LmNvbXBsZXRlZDsKKyAgICAgICAgfQor
ICAgIH07CisKKyAgICAvKioKKyAgICAgKiBSZWFkIHRoZSBgbG9jYXRpb24uaGFzaGAgdmFsdWUK
KyAgICAgKiBAcmV0dXJuIHtTdHJpbmd9CisgICAgICovCisgICAgZnVuY3Rpb24gcmVhZCgpIHsK
KyAgICAgICAgcmV0dXJuIGxvY2F0aW9uLmhhc2gucmVwbGFjZSgnIy8nLCAnJykgfHwgJ2FsbCc7
CisgICAgfQorCisgICAgLyoqCisgICAgICogTW9kaWZpZWQgYE9iamVjdC5hc3NpZ25gIHNoaW0K
KyAgICAgKiAtIGFsd2F5cyB3cml0ZXMgdG8gbmV3IG9iamVjdAorICAgICAqIEByZXR1cm4ge09i
amVjdH0KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBhc3NpZ24oKSB7CisgICAgICAgIHZhciBzcmMg
PSB2b2lkIDA7CisgICAgICAgIHZhciB0YXIgPSB7fTsKKyAgICAgICAgZm9yICh2YXIgcyA9IDA7
IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspIHsKKyAgICAgICAgICAgIHNyYyA9IE9iamVjdChh
cmd1bWVudHNbc10pOworICAgICAgICAgICAgZm9yICh2YXIgayBpbiBzcmMpIHsKKyAgICAgICAg
ICAgICAgICB0YXJba10gPSBzcmNba107CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHRhcjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBBcmUgdHdvIE9iamVjdHMg
ZXF1YWwgdmFsdWVzPworICAgICAqIEBwYXJhbSAge09iamVjdH0gYQorICAgICAqIEBwYXJhbSAg
e09iamVjdH0gYgorICAgICAqIEByZXR1cm4ge0Jvb2xlYW59CisgICAgICovCisgICAgZnVuY3Rp
b24gaXNFcXVhbChhLCBiKSB7CisgICAgICAgIC8vIENyZWF0ZSBhcnJheXMgb2YgcHJvcGVydHkg
bmFtZXMKKyAgICAgICAgdmFyIGFQcm9wcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGEp
OworICAgICAgICB2YXIgYlByb3BzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYik7CisK
KyAgICAgICAgaWYgKGFQcm9wcy5sZW5ndGggIT09IGJQcm9wcy5sZW5ndGgpIHJldHVybiBmYWxz
ZTsKKworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFQcm9wcy5sZW5ndGg7IGkrKykgewor
ICAgICAgICAgICAgdmFyIGsgPSBhUHJvcHNbaV07CisgICAgICAgICAgICBpZiAoYVtrXSAhPT0g
YltrXSkgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCisvKioqLyB9LAorLyogNiAqLworLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRz
LCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyAgICAndXNlIHN0cmljdCc7CisKKyAgICBleHBv
cnRzLl9fZXNNb2R1bGUgPSB0cnVlOworICAgIGV4cG9ydHMubGlua3MgPSB1bmRlZmluZWQ7Cisg
ICAgZXhwb3J0cy5IZWFkID0gSGVhZDsKKyAgICBleHBvcnRzLkZvb3QgPSBGb290OworCisgICAg
dmFyIF9pbmZlcm5vID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTsKKworICAgIHZhciBfaW5mZXJu
bzIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pbmZlcm5vKTsKKworICAgIHZhciBfc2hhcmUg
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpOworCisgICAgZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJl
RGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVm
YXVsdDogb2JqIH07IH0KKworICAgIC8qKgorICAgICAqIFN0YXRlbGVzcyBIZWFkZXIgY29tcG9u
ZW50CisgICAgICovCisgICAgZnVuY3Rpb24gSGVhZChfcmVmKSB7CisgICAgICAgIHZhciBvbkVu
dGVyID0gX3JlZi5vbkVudGVyOworCisgICAgICAgIHJldHVybiBfaW5mZXJubzIuZGVmYXVsdC5j
cmVhdGVWTm9kZSgyLCAnaGVhZGVyJywgeworICAgICAgICAgICAgJ2NsYXNzTmFtZSc6ICdoZWFk
ZXInCisgICAgICAgIH0sIFtfaW5mZXJubzIuZGVmYXVsdC5jcmVhdGVWTm9kZSgyLCAnaDEnLCBu
dWxsLCAndG9kb3MnKSwgX2luZmVybm8yLmRlZmF1bHQuY3JlYXRlVk5vZGUoNTEyLCAnaW5wdXQn
LCB7CisgICAgICAgICAgICAnY2xhc3NOYW1lJzogJ25ldy10b2RvJywKKyAgICAgICAgICAgICdh
dXRvZm9jdXMnOiB0cnVlLAorICAgICAgICAgICAgJ2F1dG9jb21wbGV0ZSc6ICdvZmYnLAorICAg
ICAgICAgICAgJ3BsYWNlaG9sZGVyJzogJ1doYXQgbmVlZHMgdG8gYmUgZG9uZT8nCisgICAgICAg
IH0sIG51bGwsIHsKKyAgICAgICAgICAgICdvbmtleWRvd24nOiBvbkVudGVyCisgICAgICAgIH0p
XSk7CisgICAgfQorCisgICAgdmFyIGxpbmtzID0gZXhwb3J0cy5saW5rcyA9IFt7IGhhc2g6ICcj
LycsIG5hbWU6ICdBbGwnIH0sIHsgaGFzaDogJyMvYWN0aXZlJywgbmFtZTogJ0FjdGl2ZScgfSwg
eyBoYXNoOiAnIy9jb21wbGV0ZWQnLCBuYW1lOiAnQ29tcGxldGVkJyB9XTsKKworICAgIC8qKgor
ICAgICAqIFN0YXRlbGVzcyBGb290ZXIgY29tcG9uZW50CisgICAgICovCisgICAgZnVuY3Rpb24g
Rm9vdChfcmVmMikgeworICAgICAgICB2YXIgbGVmdCA9IF9yZWYyLmxlZnQsCisgICAgICAgICAg
ICBkb25lID0gX3JlZjIuZG9uZSwKKyAgICAgICAgICAgIHJvdXRlID0gX3JlZjIucm91dGUsCisg
ICAgICAgICAgICBvbkNsZWFyID0gX3JlZjIub25DbGVhcjsKKworICAgICAgICByZXR1cm4gX2lu
ZmVybm8yLmRlZmF1bHQuY3JlYXRlVk5vZGUoMiwgJ2Zvb3RlcicsIHsKKyAgICAgICAgICAgICdj
bGFzc05hbWUnOiAnZm9vdGVyJworICAgICAgICB9LCBbX2luZmVybm8yLmRlZmF1bHQuY3JlYXRl
Vk5vZGUoMiwgJ3NwYW4nLCB7CisgICAgICAgICAgICAnY2xhc3NOYW1lJzogJ3RvZG8tY291bnQn
CisgICAgICAgIH0sIFtfaW5mZXJubzIuZGVmYXVsdC5jcmVhdGVWTm9kZSgyLCAnc3Ryb25nJywg
bnVsbCwgbGVmdCksICcgJywgbGVmdCA+IDEgPyAnaXRlbXMnIDogJ2l0ZW0nLCAnIGxlZnQnXSks
IF9pbmZlcm5vMi5kZWZhdWx0LmNyZWF0ZVZOb2RlKDIsICd1bCcsIHsKKyAgICAgICAgICAgICdj
bGFzc05hbWUnOiAnZmlsdGVycycKKyAgICAgICAgfSwgbGlua3MubWFwKGZ1bmN0aW9uIChfcmVm
MykgeworICAgICAgICAgICAgdmFyIGhhc2ggPSBfcmVmMy5oYXNoLAorICAgICAgICAgICAgICAg
IG5hbWUgPSBfcmVmMy5uYW1lOworICAgICAgICAgICAgcmV0dXJuIF9pbmZlcm5vMi5kZWZhdWx0
LmNyZWF0ZVZOb2RlKDIsICdsaScsIG51bGwsIF9pbmZlcm5vMi5kZWZhdWx0LmNyZWF0ZVZOb2Rl
KDIsICdhJywgeworICAgICAgICAgICAgICAgICdocmVmJzogaGFzaCwKKyAgICAgICAgICAgICAg
ICAnY2xhc3NOYW1lJzogbmFtZS50b0xvd2VyQ2FzZSgpID09PSByb3V0ZSA/ICdzZWxlY3RlZCcg
OiAnJworICAgICAgICAgICAgfSwgbmFtZSkpOworICAgICAgICB9KSksIGRvbmUgPiAwID8gX2lu
ZmVybm8yLmRlZmF1bHQuY3JlYXRlVk5vZGUoMiwgJ2J1dHRvbicsIHsKKyAgICAgICAgICAgICdj
bGFzc05hbWUnOiAnY2xlYXItY29tcGxldGVkJworICAgICAgICB9LCAnQ2xlYXIgY29tcGxldGVk
JywgeworICAgICAgICAgICAgJ29uQ2xpY2snOiBvbkNsZWFyCisgICAgICAgIH0pIDogbnVsbF0p
OworICAgIH0KKworLyoqKi8gfSwKKy8qIDcgKi8KKy8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhw
b3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisgICAgJ3VzZSBzdHJpY3QnOworCisgICAg
ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTsKKworICAgIHZhciBfZXh0ZW5kcyA9IE9iamVjdC5h
c3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50
cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkg
aW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291
cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJn
ZXQ7IH07CisKKyAgICB2YXIgX3NoYXJlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTsKKworICAg
IGZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEo
aW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcigi
Q2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIik7IH0gfQorCisgICAgdmFyIFNUT1Ig
PSB7fTsKKyAgICB2YXIgU1RPUl9JRCA9ICd0b2Rvcy1pbmZlcm5vJzsKKworICAgIHZhciBNb2Rl
bCA9IGZ1bmN0aW9uIE1vZGVsKCkgeworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworCisgICAg
ICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBNb2RlbCk7CisKKyAgICAgICAgdGhpcy5nZXQgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gX3RoaXMuZGF0YSA9IEpTT04ucGFyc2Uo
U1RPUltTVE9SX0lEXSB8fCAnW10nKTsKKyAgICAgICAgfTsKKworICAgICAgICB0aGlzLnNldCA9
IGZ1bmN0aW9uIChhcnIpIHsKKyAgICAgICAgICAgIF90aGlzLmRhdGEgPSBhcnIgfHwgX3RoaXMu
ZGF0YSB8fCBbXTsKKyAgICAgICAgICAgIFNUT1JbU1RPUl9JRF0gPSBKU09OLnN0cmluZ2lmeShf
dGhpcy5kYXRhKTsKKyAgICAgICAgICAgIHJldHVybiBfdGhpcy5kYXRhOworICAgICAgICB9Owor
CisgICAgICAgIHRoaXMuYWRkID0gZnVuY3Rpb24gKHN0cikgeworICAgICAgICAgICAgcmV0dXJu
IF90aGlzLnNldChfdGhpcy5kYXRhLmNvbmNhdCh7IHRpdGxlOiBzdHIsIGNvbXBsZXRlZDogZmFs
c2UgfSkpOworICAgICAgICB9OworCisgICAgICAgIHRoaXMucHV0ID0gZnVuY3Rpb24gKHRvZG8s
IG9iaikgeworICAgICAgICAgICAgcmV0dXJuIF90aGlzLnNldChfdGhpcy5kYXRhLm1hcChmdW5j
dGlvbiAodCkgeworICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX3NoYXJlLmlzRXF1YWwpKHQs
IHRvZG8pID8gKDAsIF9zaGFyZS5hc3NpZ24pKHRvZG8sIG9iaikgOiB0OworICAgICAgICAgICAg
fSkpOworICAgICAgICB9OworCisgICAgICAgIHRoaXMuZGVsID0gZnVuY3Rpb24gKHRvZG8pIHsK
KyAgICAgICAgICAgIHJldHVybiBfdGhpcy5zZXQoX3RoaXMuZGF0YS5maWx0ZXIoZnVuY3Rpb24g
KHQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISgwLCBfc2hhcmUuaXNFcXVhbCkodCwgdG9k
byk7CisgICAgICAgICAgICB9KSk7CisgICAgICAgIH07CisKKyAgICAgICAgdGhpcy50b2dnbGUg
PSBmdW5jdGlvbiAodG9kbykgeworICAgICAgICAgICAgcmV0dXJuIF90aGlzLnB1dCh0b2RvLCB7
IGNvbXBsZXRlZDogIXRvZG8uY29tcGxldGVkIH0pOworICAgICAgICB9OworCisgICAgICAgIHRo
aXMudG9nZ2xlQWxsID0gZnVuY3Rpb24gKGNvbXBsZXRlZCkgeworICAgICAgICAgICAgcmV0dXJu
IF90aGlzLnNldChfdGhpcy5kYXRhLm1hcChmdW5jdGlvbiAodCkgeworICAgICAgICAgICAgICAg
IHJldHVybiBfZXh0ZW5kcyh7fSwgdCwgeyBjb21wbGV0ZWQ6IGNvbXBsZXRlZCB9KTsKKyAgICAg
ICAgICAgIH0pKTsKKyAgICAgICAgfTsKKworICAgICAgICB0aGlzLmNsZWFyQ29tcGxldGVkID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIF90aGlzLnNldChfdGhpcy5kYXRhLmZp
bHRlcihmdW5jdGlvbiAodCkgeworICAgICAgICAgICAgICAgIHJldHVybiAhdC5jb21wbGV0ZWQ7
CisgICAgICAgICAgICB9KSk7CisgICAgICAgIH07CisgICAgfTsKKworICAgIGV4cG9ydHMuZGVm
YXVsdCA9IE1vZGVsOworCisvKioqLyB9LAorLyogOCAqLworLyoqKi8gZnVuY3Rpb24obW9kdWxl
LCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyAgICAndXNlIHN0cmljdCc7CisK
KyAgICBleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlOworCisgICAgdmFyIF9pbmZlcm5vID0gX193
ZWJwYWNrX3JlcXVpcmVfXygxKTsKKworICAgIHZhciBfaW5mZXJubzIgPSBfaW50ZXJvcFJlcXVp
cmVEZWZhdWx0KF9pbmZlcm5vKTsKKworICAgIHZhciBfaW5mZXJub0NvbXBvbmVudCA9IF9fd2Vi
cGFja19yZXF1aXJlX18oMyk7CisKKyAgICB2YXIgX2luZmVybm9Db21wb25lbnQyID0gX2ludGVy
b3BSZXF1aXJlRGVmYXVsdChfaW5mZXJub0NvbXBvbmVudCk7CisKKyAgICB2YXIgX3NoYXJlID0g
X193ZWJwYWNrX3JlcXVpcmVfXyg1KTsKKworICAgIGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURl
ZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1
bHQ6IG9iaiB9OyB9CisKKyAgICBmdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob2Jq
LCBrZXlzKSB7IHZhciB0YXJnZXQgPSB7fTsgZm9yICh2YXIgaSBpbiBvYmopIHsgaWYgKGtleXMu
aW5kZXhPZihpKSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blBy
b3BlcnR5LmNhbGwob2JqLCBpKSkgY29udGludWU7IHRhcmdldFtpXSA9IG9ialtpXTsgfSByZXR1
cm4gdGFyZ2V0OyB9CisKKyAgICBmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENv
bnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRo
cm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpOyB9
IH0KKworICAgIGZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwp
IHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVl
biBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7IH0gcmV0dXJuIGNh
bGwgJiYgKHR5cGVvZiBjYWxsID09PSAib2JqZWN0IiB8fCB0eXBlb2YgY2FsbCA9PT0gImZ1bmN0
aW9uIikgPyBjYWxsIDogc2VsZjsgfQorCisgICAgZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNz
LCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gImZ1bmN0aW9uIiAmJiBz
dXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Np
b24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgIiArIHR5cGVvZiBzdXBl
ckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3Mg
JiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNz
LCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9
IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFBy
b3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1
cGVyQ2xhc3M7IH0KKworICAgIHZhciBJdGVtID0gZnVuY3Rpb24gKF9Db21wb25lbnQpIHsKKyAg
ICAgICAgX2luaGVyaXRzKEl0ZW0sIF9Db21wb25lbnQpOworCisgICAgICAgIGZ1bmN0aW9uIEl0
ZW0oX3JlZikgeworICAgICAgICAgICAgdmFyIGRhdGEgPSBfcmVmLmRhdGEsCisgICAgICAgICAg
ICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgWydkYXRhJ10pOwor
CisgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgSXRlbSk7CisKKyAgICAgICAgICAg
IHZhciBfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9Db21wb25lbnQu
Y2FsbCh0aGlzLCBwcm9wcykpOworCisgICAgICAgICAgICBfaW5pdGlhbGlzZVByb3BzLmNhbGwo
X3RoaXMpOworCisgICAgICAgICAgICBfdGhpcy50b2RvID0gZGF0YTsKKyAgICAgICAgICAgIF90
aGlzLnN0YXRlID0geyB0ZXh0OiBkYXRhLnRpdGxlIH07CisgICAgICAgICAgICBfdGhpcy5lZGl0
b3IgPSBudWxsOworICAgICAgICAgICAgcmV0dXJuIF90aGlzOworICAgICAgICB9CisKKyAgICAg
ICAgSXRlbS5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKF9yZWYyLCBfcmVmMykg
eworICAgICAgICAgICAgdmFyIF90aGlzMiA9IHRoaXM7CisKKyAgICAgICAgICAgIHZhciBkb1Rv
Z2dsZSA9IF9yZWYyLmRvVG9nZ2xlLAorICAgICAgICAgICAgICAgIGRvRGVsZXRlID0gX3JlZjIu
ZG9EZWxldGUsCisgICAgICAgICAgICAgICAgZG9TYXZlID0gX3JlZjIuZG9TYXZlLAorICAgICAg
ICAgICAgICAgIG9uQmx1ciA9IF9yZWYyLm9uQmx1ciwKKyAgICAgICAgICAgICAgICBvbkZvY3Vz
ID0gX3JlZjIub25Gb2N1czsKKyAgICAgICAgICAgIHZhciB0ZXh0ID0gX3JlZjMudGV4dDsKKyAg
ICAgICAgICAgIHZhciBfdG9kbyA9IHRoaXMudG9kbywKKyAgICAgICAgICAgICAgICB0aXRsZSA9
IF90b2RvLnRpdGxlLAorICAgICAgICAgICAgICAgIGNvbXBsZXRlZCA9IF90b2RvLmNvbXBsZXRl
ZCwKKyAgICAgICAgICAgICAgICBlZGl0aW5nID0gX3RvZG8uZWRpdGluZzsKKworCisgICAgICAg
ICAgICB2YXIgY2xzID0gW107CisgICAgICAgICAgICBlZGl0aW5nICYmIGNscy5wdXNoKCdlZGl0
aW5nJyk7CisgICAgICAgICAgICBjb21wbGV0ZWQgJiYgY2xzLnB1c2goJ2NvbXBsZXRlZCcpOwor
CisgICAgICAgICAgICB2YXIgaGFuZGxlS2V5ZG93biA9IGZ1bmN0aW9uIGhhbmRsZUtleWRvd24o
ZSkgeworICAgICAgICAgICAgICAgIGlmIChlLndoaWNoID09PSBfc2hhcmUuRVNDQVBFKSByZXR1
cm4gb25CbHVyKCk7CisgICAgICAgICAgICAgICAgaWYgKGUud2hpY2ggPT09IF9zaGFyZS5FTlRF
UikgcmV0dXJuIGRvU2F2ZSh0ZXh0KTsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIC8v
IHRtcCBmaXgKKyAgICAgICAgICAgIHZhciBoYW5kbGVCbHVyID0gZnVuY3Rpb24gaGFuZGxlQmx1
cigpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZG9TYXZlKHRleHQpOworICAgICAgICAgICAg
fTsKKyAgICAgICAgICAgIHZhciBoYW5kbGVJbnB1dCA9IGZ1bmN0aW9uIGhhbmRsZUlucHV0KGUp
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMyLnNldFRleHQoZS50YXJnZXQudmFsdWUp
OworICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgcmV0dXJuIF9pbmZlcm5vMi5kZWZhdWx0
LmNyZWF0ZVZOb2RlKDIsICdsaScsIHsKKyAgICAgICAgICAgICAgICAnY2xhc3NOYW1lJzogY2xz
LmpvaW4oJyAnKQorICAgICAgICAgICAgfSwgW19pbmZlcm5vMi5kZWZhdWx0LmNyZWF0ZVZOb2Rl
KDIsICdkaXYnLCB7CisgICAgICAgICAgICAgICAgJ2NsYXNzTmFtZSc6ICd2aWV3JworICAgICAg
ICAgICAgfSwgW19pbmZlcm5vMi5kZWZhdWx0LmNyZWF0ZVZOb2RlKDUxMiwgJ2lucHV0Jywgewor
ICAgICAgICAgICAgICAgICdjbGFzc05hbWUnOiAndG9nZ2xlJywKKyAgICAgICAgICAgICAgICAn
dHlwZSc6ICdjaGVja2JveCcsCisgICAgICAgICAgICAgICAgJ2NoZWNrZWQnOiBjb21wbGV0ZWQK
KyAgICAgICAgICAgIH0sIG51bGwsIHsKKyAgICAgICAgICAgICAgICAnb25DbGljayc6IGRvVG9n
Z2xlCisgICAgICAgICAgICB9KSwgX2luZmVybm8yLmRlZmF1bHQuY3JlYXRlVk5vZGUoMiwgJ2xh
YmVsJywgbnVsbCwgdGl0bGUsIHsKKyAgICAgICAgICAgICAgICAnb25kYmxjbGljayc6IG9uRm9j
dXMKKyAgICAgICAgICAgIH0pLCBfaW5mZXJubzIuZGVmYXVsdC5jcmVhdGVWTm9kZSgyLCAnYnV0
dG9uJywgeworICAgICAgICAgICAgICAgICdjbGFzc05hbWUnOiAnZGVzdHJveScKKyAgICAgICAg
ICAgIH0sIG51bGwsIHsKKyAgICAgICAgICAgICAgICAnb25DbGljayc6IGRvRGVsZXRlCisgICAg
ICAgICAgICB9KV0pLCBfaW5mZXJubzIuZGVmYXVsdC5jcmVhdGVWTm9kZSg1MTIsICdpbnB1dCcs
IHsKKyAgICAgICAgICAgICAgICAnY2xhc3NOYW1lJzogJ2VkaXQnLAorICAgICAgICAgICAgICAg
ICd2YWx1ZSc6IGVkaXRpbmcgJiYgdGV4dAorICAgICAgICAgICAgfSwgbnVsbCwgeworICAgICAg
ICAgICAgICAgICdvbmJsdXInOiBoYW5kbGVCbHVyLAorICAgICAgICAgICAgICAgICdvbmlucHV0
JzogaGFuZGxlSW5wdXQsCisgICAgICAgICAgICAgICAgJ29ua2V5ZG93bic6IGhhbmRsZUtleWRv
d24KKyAgICAgICAgICAgIH0sIG51bGwsIGZ1bmN0aW9uIChlbCkgeworICAgICAgICAgICAgICAg
IF90aGlzMi5lZGl0b3IgPSBlbDsKKyAgICAgICAgICAgIH0pXSk7CisgICAgICAgIH07CisKKyAg
ICAgICAgcmV0dXJuIEl0ZW07CisgICAgfShfaW5mZXJub0NvbXBvbmVudDIuZGVmYXVsdCk7CisK
KyAgICB2YXIgX2luaXRpYWxpc2VQcm9wcyA9IGZ1bmN0aW9uIF9pbml0aWFsaXNlUHJvcHMoKSB7
CisgICAgICAgIHZhciBfdGhpczMgPSB0aGlzOworCisgICAgICAgIHRoaXMuY29tcG9uZW50V2ls
bFJlY2VpdmVQcm9wcyA9IGZ1bmN0aW9uIChfcmVmNCkgeworICAgICAgICAgICAgdmFyIGRhdGEg
PSBfcmVmNC5kYXRhOworICAgICAgICAgICAgcmV0dXJuIF90aGlzMy5zZXRUZXh0KGRhdGEudGl0
bGUpOworICAgICAgICB9OworCisgICAgICAgIHRoaXMuc2hvdWxkQ29tcG9uZW50VXBkYXRlID0g
ZnVuY3Rpb24gKF9yZWY1LCBfcmVmNikgeworICAgICAgICAgICAgdmFyIGRhdGEgPSBfcmVmNS5k
YXRhOworICAgICAgICAgICAgdmFyIHRleHQgPSBfcmVmNi50ZXh0OworICAgICAgICAgICAgcmV0
dXJuICEoKDAsIF9zaGFyZS5pc0VxdWFsKShkYXRhLCBfdGhpczMudG9kbykgJiYgdGV4dCA9PT0g
X3RoaXMzLnN0YXRlLnRleHQpOworICAgICAgICB9OworCisgICAgICAgIHRoaXMuY29tcG9uZW50
V2lsbFVwZGF0ZSA9IGZ1bmN0aW9uIChfcmVmNykgeworICAgICAgICAgICAgdmFyIGRhdGEgPSBf
cmVmNy5kYXRhOworICAgICAgICAgICAgcmV0dXJuIF90aGlzMy50b2RvID0gZGF0YTsKKyAgICAg
ICAgfTsKKworICAgICAgICB0aGlzLmNvbXBvbmVudERpZFVwZGF0ZSA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgIHJldHVybiBfdGhpczMuZWRpdG9yLmZvY3VzKCk7CisgICAgICAgIH07CisK
KyAgICAgICAgdGhpcy5zZXRUZXh0ID0gZnVuY3Rpb24gKHRleHQpIHsKKyAgICAgICAgICAgIHJl
dHVybiBfdGhpczMuc2V0U3RhdGUoeyB0ZXh0OiB0ZXh0IH0pOworICAgICAgICB9OworICAgIH07
CisKKyAgICBleHBvcnRzLmRlZmF1bHQgPSBJdGVtOworCisvKioqLyB9CisvKioqKioqLyBdKTsK
XCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9pbmZl
cm5vL2luZGV4Lmh0bWwgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90
b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9pbmZlcm5vL2luZGV4Lmh0bWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNTAxNTc4MTVkM2NiOWQ5MTU2ZTg4ZmJkMDYyZWRjYTQ4ODNmYzUwNgotLS0gL2Rldi9udWxs
CisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJj
aGl0ZWN0dXJlLWV4YW1wbGVzL2luZmVybm8vaW5kZXguaHRtbApAQCAtMCwwICsxLDE4IEBACis8
IWRvY3R5cGUgaHRtbD4KKzxodG1sIGxhbmc9ImVuIiBkYXRhLWZyYW1ld29yaz0iaW5mZXJubyI+
CisgICAgPGhlYWQ+CisgICAgICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgICAgICAgPHRp
dGxlPkluZmVybm8g4oCiIFRvZG9NVkM8L3RpdGxlPgorICAgICAgICA8bGluayByZWw9InN0eWxl
c2hlZXQiIGhyZWY9Im5vZGVfbW9kdWxlcy90b2RvbXZjLWNvbW1vbi9iYXNlLmNzcyI+CisgICAg
ICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ibm9kZV9tb2R1bGVzL3RvZG9tdmMtYXBw
LWNzcy9pbmRleC5jc3MiPgorICAgIDwvaGVhZD4KKyAgICA8Ym9keT4KKyAgICAgICAgPHNlY3Rp
b24gaWQ9ImFwcCIgY2xhc3M9InRvZG9hcHAiPjwvc2VjdGlvbj4KKyAgICAgICAgPGZvb3RlciBj
bGFzcz0iaW5mbyI+CisgICAgICAgICAgICA8cD5Eb3VibGUtY2xpY2sgdG8gZWRpdCBhIHRvZG88
L3A+CisgICAgICAgICAgICA8cD5QYXJ0IG9mIDxhIGhyZWY9Imh0dHA6Ly90b2RvbXZjLmNvbSI+
VG9kb01WQzwvYT48L3A+CisgICAgICAgIDwvZm9vdGVyPgorCisgICAgICAgIDxzY3JpcHQgc3Jj
PSJkaXN0L2J1bmRsZS5qcyI+PC9zY3JpcHQ+CisgICAgPC9ib2R5PgorPC9odG1sPgpkaWZmIC0t
Z2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNo
aXRlY3R1cmUtZXhhbXBsZXMvaW5mZXJuby9ub2RlX21vZHVsZXMvdG9kb212Yy1hcHAtY3NzL2lu
ZGV4LmNzcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMv
YXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2luZmVybm8vbm9kZV9tb2R1bGVzL3RvZG9tdmMtYXBwLWNz
cy9pbmRleC5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTBlM2QyZjZiNzkzZDQyY2I0ZTIwYWVlYTQ4YTNiNWNl
YjQ4NmVlNQotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIv
cmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2luZmVybm8vbm9kZV9tb2R1
bGVzL3RvZG9tdmMtYXBwLWNzcy9pbmRleC5jc3MKQEAgLTAsMCArMSwzNzAgQEAKK2h0bWwsCiti
b2R5IHsKKyAgICBtYXJnaW46IDA7CisgICAgcGFkZGluZzogMDsKK30KKworYnV0dG9uIHsKKyAg
ICBtYXJnaW46IDA7CisgICAgcGFkZGluZzogMDsKKyAgICBib3JkZXI6IDA7CisgICAgYmFja2dy
b3VuZDogbm9uZTsKKyAgICBmb250LXNpemU6IDEwMCU7CisgICAgdmVydGljYWwtYWxpZ246IGJh
c2VsaW5lOworICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OworICAgIGZvbnQtd2VpZ2h0OiBpbmhl
cml0OworICAgIGNvbG9yOiBpbmhlcml0OworICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsK
KyAgICBhcHBlYXJhbmNlOiBub25lOworICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlh
bGlhc2VkOworICAgIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7Cit9CisKK2Jv
ZHkgeworICAgIGZvbnQ6IDE0cHggJ0hlbHZldGljYSBOZXVlJywgSGVsdmV0aWNhLCBBcmlhbCwg
c2Fucy1zZXJpZjsKKyAgICBsaW5lLWhlaWdodDogMS40ZW07CisgICAgYmFja2dyb3VuZDogI2Y1
ZjVmNTsKKyAgICBjb2xvcjogIzRkNGQ0ZDsKKyAgICBtaW4td2lkdGg6IDIzMHB4OworICAgIG1h
eC13aWR0aDogNTUwcHg7CisgICAgbWFyZ2luOiAwIGF1dG87CisgICAgLXdlYmtpdC1mb250LXNt
b290aGluZzogYW50aWFsaWFzZWQ7CisgICAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlz
Y2FsZTsKKyAgICBmb250LXdlaWdodDogMzAwOworfQorCis6Zm9jdXMgeworICAgIG91dGxpbmU6
IDA7Cit9CisKKy5oaWRkZW4geworICAgIGRpc3BsYXk6IG5vbmU7Cit9CisKKy50b2RvYXBwIHsK
KyAgICBiYWNrZ3JvdW5kOiAjZmZmOworICAgIG1hcmdpbjogMTMwcHggMCA0MHB4IDA7CisgICAg
cG9zaXRpb246IHJlbGF0aXZlOworICAgIGJveC1zaGFkb3c6IDAgMnB4IDRweCAwIHJnYmEoMCwg
MCwgMCwgMC4yKSwKKyAgICAgICAgICAgICAgICAwIDI1cHggNTBweCAwIHJnYmEoMCwgMCwgMCwg
MC4xKTsKK30KKworLnRvZG9hcHAgaW5wdXQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIgewor
ICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKKyAgICBmb250LXdlaWdodDogMzAwOworICAgIGNvbG9y
OiAjZTZlNmU2OworfQorCisudG9kb2FwcCBpbnB1dDo6LW1vei1wbGFjZWhvbGRlciB7CisgICAg
Zm9udC1zdHlsZTogaXRhbGljOworICAgIGZvbnQtd2VpZ2h0OiAzMDA7CisgICAgY29sb3I6ICNl
NmU2ZTY7Cit9CisKKy50b2RvYXBwIGlucHV0OjppbnB1dC1wbGFjZWhvbGRlciB7CisgICAgZm9u
dC1zdHlsZTogaXRhbGljOworICAgIGZvbnQtd2VpZ2h0OiAzMDA7CisgICAgY29sb3I6ICNlNmU2
ZTY7Cit9CisKKy50b2RvYXBwIGgxIHsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgdG9w
OiAtMTU1cHg7CisgICAgd2lkdGg6IDEwMCU7CisgICAgZm9udC1zaXplOiAxMDBweDsKKyAgICBm
b250LXdlaWdodDogMTAwOworICAgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICBjb2xvcjogcmdi
YSgxNzUsIDQ3LCA0NywgMC4xNSk7CisgICAgLXdlYmtpdC10ZXh0LXJlbmRlcmluZzogb3B0aW1p
emVMZWdpYmlsaXR5OworICAgIC1tb3otdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0
eTsKKyAgICB0ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5OworfQorCisubmV3LXRv
ZG8sCisuZWRpdCB7CisgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgIG1hcmdpbjogMDsKKyAg
ICB3aWR0aDogMTAwJTsKKyAgICBmb250LXNpemU6IDI0cHg7CisgICAgZm9udC1mYW1pbHk6IGlu
aGVyaXQ7CisgICAgZm9udC13ZWlnaHQ6IGluaGVyaXQ7CisgICAgbGluZS1oZWlnaHQ6IDEuNGVt
OworICAgIGJvcmRlcjogMDsKKyAgICBjb2xvcjogaW5oZXJpdDsKKyAgICBwYWRkaW5nOiA2cHg7
CisgICAgYm9yZGVyOiAxcHggc29saWQgIzk5OTsKKyAgICBib3gtc2hhZG93OiBpbnNldCAwIC0x
cHggNXB4IDAgcmdiYSgwLCAwLCAwLCAwLjIpOworICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7
CisgICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7CisgICAgLW1vei1vc3gt
Zm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTsKK30KKworLm5ldy10b2RvIHsKKyAgICBwYWRkaW5n
OiAxNnB4IDE2cHggMTZweCA2MHB4OworICAgIGJvcmRlcjogbm9uZTsKKyAgICBiYWNrZ3JvdW5k
OiByZ2JhKDAsIDAsIDAsIDAuMDAzKTsKKyAgICBib3gtc2hhZG93OiBpbnNldCAwIC0ycHggMXB4
IHJnYmEoMCwwLDAsMC4wMyk7Cit9CisKKy5tYWluIHsKKyAgICBwb3NpdGlvbjogcmVsYXRpdmU7
CisgICAgei1pbmRleDogMjsKKyAgICBib3JkZXItdG9wOiAxcHggc29saWQgI2U2ZTZlNjsKK30K
KworbGFiZWxbZm9yPSd0b2dnbGUtYWxsJ10geworICAgIGRpc3BsYXk6IG5vbmU7Cit9CisKKy50
b2dnbGUtYWxsIHsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgdG9wOiAtNTVweDsKKyAg
ICBsZWZ0OiAtMTJweDsKKyAgICB3aWR0aDogNjBweDsKKyAgICBoZWlnaHQ6IDM0cHg7CisgICAg
dGV4dC1hbGlnbjogY2VudGVyOworICAgIGJvcmRlcjogbm9uZTsgLyogTW9iaWxlIFNhZmFyaSAq
LworfQorCisudG9nZ2xlLWFsbDpiZWZvcmUgeworICAgIGNvbnRlbnQ6ICfina8nOworICAgIGZv
bnQtc2l6ZTogMjJweDsKKyAgICBjb2xvcjogI2U2ZTZlNjsKKyAgICBwYWRkaW5nOiAxMHB4IDI3
cHggMTBweCAyN3B4OworfQorCisudG9nZ2xlLWFsbDpjaGVja2VkOmJlZm9yZSB7CisgICAgY29s
b3I6ICM3MzczNzM7Cit9CisKKy50b2RvLWxpc3QgeworICAgIG1hcmdpbjogMDsKKyAgICBwYWRk
aW5nOiAwOworICAgIGxpc3Qtc3R5bGU6IG5vbmU7Cit9CisKKy50b2RvLWxpc3QgbGkgeworICAg
IHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICBmb250LXNpemU6IDI0cHg7CisgICAgYm9yZGVyLWJv
dHRvbTogMXB4IHNvbGlkICNlZGVkZWQ7Cit9CisKKy50b2RvLWxpc3QgbGk6bGFzdC1jaGlsZCB7
CisgICAgYm9yZGVyLWJvdHRvbTogbm9uZTsKK30KKworLnRvZG8tbGlzdCBsaS5lZGl0aW5nIHsK
KyAgICBib3JkZXItYm90dG9tOiBub25lOworICAgIHBhZGRpbmc6IDA7Cit9CisKKy50b2RvLWxp
c3QgbGkuZWRpdGluZyAuZWRpdCB7CisgICAgZGlzcGxheTogYmxvY2s7CisgICAgd2lkdGg6IDUw
NnB4OworICAgIHBhZGRpbmc6IDEycHggMTZweDsKKyAgICBtYXJnaW46IDAgMCAwIDQzcHg7Cit9
CisKKy50b2RvLWxpc3QgbGkuZWRpdGluZyAudmlldyB7CisgICAgZGlzcGxheTogbm9uZTsKK30K
KworLnRvZG8tbGlzdCBsaSAudG9nZ2xlIHsKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAg
d2lkdGg6IDQwcHg7CisgICAgLyogYXV0bywgc2luY2Ugbm9uLVdlYktpdCBicm93c2VycyBkb2Vz
bid0IHN1cHBvcnQgaW5wdXQgc3R5bGluZyAqLworICAgIGhlaWdodDogYXV0bzsKKyAgICBwb3Np
dGlvbjogYWJzb2x1dGU7CisgICAgdG9wOiAwOworICAgIGJvdHRvbTogMDsKKyAgICBtYXJnaW46
IGF1dG8gMDsKKyAgICBib3JkZXI6IG5vbmU7IC8qIE1vYmlsZSBTYWZhcmkgKi8KKyAgICAtd2Vi
a2l0LWFwcGVhcmFuY2U6IG5vbmU7CisgICAgYXBwZWFyYW5jZTogbm9uZTsKK30KKworLnRvZG8t
bGlzdCBsaSAudG9nZ2xlOmFmdGVyIHsKKyAgICBjb250ZW50OiB1cmwoJ2RhdGE6aW1hZ2Uvc3Zn
K3htbDt1dGY4LDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0i
NDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9Ii0xMCAtMTggMTAwIDEzNSI+PGNpcmNsZSBjeD0iNTAi
IGN5PSI1MCIgcj0iNTAiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2VkZWRlZCIgc3Ryb2tlLXdpZHRo
PSIzIi8+PC9zdmc+Jyk7Cit9CisKKy50b2RvLWxpc3QgbGkgLnRvZ2dsZTpjaGVja2VkOmFmdGVy
IHsKKyAgICBjb250ZW50OiB1cmwoJ2RhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9
Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdC
b3g9Ii0xMCAtMTggMTAwIDEzNSI+PGNpcmNsZSBjeD0iNTAiIGN5PSI1MCIgcj0iNTAiIGZpbGw9
Im5vbmUiIHN0cm9rZT0iI2JkZGFkNSIgc3Ryb2tlLXdpZHRoPSIzIi8+PHBhdGggZmlsbD0iIzVk
YzJhZiIgZD0iTTcyIDI1TDQyIDcxIDI3IDU2bC00IDQgMjAgMjAgMzQtNTJ6Ii8+PC9zdmc+Jyk7
Cit9CisKKy50b2RvLWxpc3QgbGkgbGFiZWwgeworICAgIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDsK
KyAgICBwYWRkaW5nOiAxNXB4IDYwcHggMTVweCAxNXB4OworICAgIG1hcmdpbi1sZWZ0OiA0NXB4
OworICAgIGRpc3BsYXk6IGJsb2NrOworICAgIGxpbmUtaGVpZ2h0OiAxLjI7CisgICAgdHJhbnNp
dGlvbjogY29sb3IgMC40czsKK30KKworLnRvZG8tbGlzdCBsaS5jb21wbGV0ZWQgbGFiZWwgewor
ICAgIGNvbG9yOiAjZDlkOWQ5OworICAgIHRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOwor
fQorCisudG9kby1saXN0IGxpIC5kZXN0cm95IHsKKyAgICBkaXNwbGF5OiBub25lOworICAgIHBv
c2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IDA7CisgICAgcmlnaHQ6IDEwcHg7CisgICAgYm90
dG9tOiAwOworICAgIHdpZHRoOiA0MHB4OworICAgIGhlaWdodDogNDBweDsKKyAgICBtYXJnaW46
IGF1dG8gMDsKKyAgICBmb250LXNpemU6IDMwcHg7CisgICAgY29sb3I6ICNjYzlhOWE7CisgICAg
bWFyZ2luLWJvdHRvbTogMTFweDsKKyAgICB0cmFuc2l0aW9uOiBjb2xvciAwLjJzIGVhc2Utb3V0
OworfQorCisudG9kby1saXN0IGxpIC5kZXN0cm95OmhvdmVyIHsKKyAgICBjb2xvcjogI2FmNWI1
ZTsKK30KKworLnRvZG8tbGlzdCBsaSAuZGVzdHJveTphZnRlciB7CisgICAgY29udGVudDogJ8OX
JzsKK30KKworLnRvZG8tbGlzdCBsaTpob3ZlciAuZGVzdHJveSB7CisgICAgZGlzcGxheTogYmxv
Y2s7Cit9CisKKy50b2RvLWxpc3QgbGkgLmVkaXQgeworICAgIGRpc3BsYXk6IG5vbmU7Cit9CisK
Ky50b2RvLWxpc3QgbGkuZWRpdGluZzpsYXN0LWNoaWxkIHsKKyAgICBtYXJnaW4tYm90dG9tOiAt
MXB4OworfQorCisuZm9vdGVyIHsKKyAgICBjb2xvcjogIzc3NzsKKyAgICBwYWRkaW5nOiAxMHB4
IDE1cHg7CisgICAgaGVpZ2h0OiAyMHB4OworICAgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICBi
b3JkZXItdG9wOiAxcHggc29saWQgI2U2ZTZlNjsKK30KKworLmZvb3RlcjpiZWZvcmUgeworICAg
IGNvbnRlbnQ6ICcnOworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICByaWdodDogMDsKKyAg
ICBib3R0b206IDA7CisgICAgbGVmdDogMDsKKyAgICBoZWlnaHQ6IDUwcHg7CisgICAgb3ZlcmZs
b3c6IGhpZGRlbjsKKyAgICBib3gtc2hhZG93OiAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjIp
LAorICAgICAgICAgICAgICAgIDAgOHB4IDAgLTNweCAjZjZmNmY2LAorICAgICAgICAgICAgICAg
IDAgOXB4IDFweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwKKyAgICAgICAgICAgICAgICAwIDE2
cHggMCAtNnB4ICNmNmY2ZjYsCisgICAgICAgICAgICAgICAgMCAxN3B4IDJweCAtNnB4IHJnYmEo
MCwgMCwgMCwgMC4yKTsKK30KKworLnRvZG8tY291bnQgeworICAgIGZsb2F0OiBsZWZ0OworICAg
IHRleHQtYWxpZ246IGxlZnQ7Cit9CisKKy50b2RvLWNvdW50IHN0cm9uZyB7CisgICAgZm9udC13
ZWlnaHQ6IDMwMDsKK30KKworLmZpbHRlcnMgeworICAgIG1hcmdpbjogMDsKKyAgICBwYWRkaW5n
OiAwOworICAgIGxpc3Qtc3R5bGU6IG5vbmU7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAg
IHJpZ2h0OiAwOworICAgIGxlZnQ6IDA7Cit9CisKKy5maWx0ZXJzIGxpIHsKKyAgICBkaXNwbGF5
OiBpbmxpbmU7Cit9CisKKy5maWx0ZXJzIGxpIGEgeworICAgIGNvbG9yOiBpbmhlcml0OworICAg
IG1hcmdpbjogM3B4OworICAgIHBhZGRpbmc6IDNweCA3cHg7CisgICAgdGV4dC1kZWNvcmF0aW9u
OiBub25lOworICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OworICAgIGJvcmRlci1y
YWRpdXM6IDNweDsKK30KKworLmZpbHRlcnMgbGkgYTpob3ZlciB7CisgICAgYm9yZGVyLWNvbG9y
OiByZ2JhKDE3NSwgNDcsIDQ3LCAwLjEpOworfQorCisuZmlsdGVycyBsaSBhLnNlbGVjdGVkIHsK
KyAgICBib3JkZXItY29sb3I6IHJnYmEoMTc1LCA0NywgNDcsIDAuMik7Cit9CisKKy5jbGVhci1j
b21wbGV0ZWQsCitodG1sIC5jbGVhci1jb21wbGV0ZWQ6YWN0aXZlIHsKKyAgICBmbG9hdDogcmln
aHQ7CisgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgIGxpbmUtaGVpZ2h0OiAyMHB4OworICAg
IHRleHQtZGVjb3JhdGlvbjogbm9uZTsKKyAgICBjdXJzb3I6IHBvaW50ZXI7Cit9CisKKy5jbGVh
ci1jb21wbGV0ZWQ6aG92ZXIgeworICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworfQor
CisuaW5mbyB7CisgICAgbWFyZ2luOiA2NXB4IGF1dG8gMDsKKyAgICBjb2xvcjogI2JmYmZiZjsK
KyAgICBmb250LXNpemU6IDEwcHg7CisgICAgdGV4dC1zaGFkb3c6IDAgMXB4IDAgcmdiYSgyNTUs
IDI1NSwgMjU1LCAwLjUpOworICAgIHRleHQtYWxpZ246IGNlbnRlcjsKK30KKworLmluZm8gcCB7
CisgICAgbGluZS1oZWlnaHQ6IDE7Cit9CisKKy5pbmZvIGEgeworICAgIGNvbG9yOiBpbmhlcml0
OworICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKKyAgICBmb250LXdlaWdodDogNDAwOworfQor
CisuaW5mbyBhOmhvdmVyIHsKKyAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKK30KKwor
LyoKKyAgICBIYWNrIHRvIHJlbW92ZSBiYWNrZ3JvdW5kIGZyb20gTW9iaWxlIFNhZmFyaS4KKyAg
ICBDYW4ndCB1c2UgaXQgZ2xvYmFsbHkgc2luY2UgaXQgZGVzdHJveXMgY2hlY2tib3hlcyBpbiBG
aXJlZm94CisqLworQG1lZGlhIHNjcmVlbiBhbmQgKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1y
YXRpbzowKSB7CisgICAgLnRvZ2dsZS1hbGwsCisgICAgLnRvZG8tbGlzdCBsaSAudG9nZ2xlIHsK
KyAgICAgICAgYmFja2dyb3VuZDogbm9uZTsKKyAgICB9CisKKyAgICAudG9kby1saXN0IGxpIC50
b2dnbGUgeworICAgICAgICBoZWlnaHQ6IDQwcHg7CisgICAgfQorCisgICAgLnRvZ2dsZS1hbGwg
eworICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTsKKyAgICAgICAgdHJh
bnNmb3JtOiByb3RhdGUoOTBkZWcpOworICAgICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7
CisgICAgICAgIGFwcGVhcmFuY2U6IG5vbmU7CisgICAgfQorfQorCitAbWVkaWEgKG1heC13aWR0
aDogNDMwcHgpIHsKKyAgICAuZm9vdGVyIHsKKyAgICAgICAgaGVpZ2h0OiA1MHB4OworICAgIH0K
KworICAgIC5maWx0ZXJzIHsKKyAgICAgICAgYm90dG9tOiAxMHB4OworICAgIH0KK30KZGlmZiAt
LWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJj
aGl0ZWN0dXJlLWV4YW1wbGVzL2luZmVybm8vbm9kZV9tb2R1bGVzL3RvZG9tdmMtYXBwLWNzcy9w
YWNrYWdlLmpzb24gYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2Rv
bXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9pbmZlcm5vL25vZGVfbW9kdWxlcy90b2RvbXZjLWFw
cC1jc3MvcGFja2FnZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ2NTMxYzVkMjQzNWIyMTE2M2E2N2I4MGU0
MTVhNzQ3ZDk4ODJlYmYKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVk
b21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9pbmZlcm5vL25v
ZGVfbW9kdWxlcy90b2RvbXZjLWFwcC1jc3MvcGFja2FnZS5qc29uCkBAIC0wLDAgKzEsMjYgQEAK
K3sKKyAgIm5hbWUiOiAidG9kb212Yy1hcHAtY3NzIiwKKyAgInN0eWxlIjogImluZGV4LmNzcyIs
CisgICJ2ZXJzaW9uIjogIjIuMC42IiwKKyAgImRlc2NyaXB0aW9uIjogIkNTUyBmb3IgVG9kb01W
QyBhcHBzIiwKKyAgImxpY2Vuc2UiOiAiQ0MtQlktNC4wIiwKKyAgInJlcG9zaXRvcnkiOiAidGFz
dGVqcy90b2RvbXZjLWFwcC1jc3MiLAorICAiYXV0aG9yIjogeworICAgICJuYW1lIjogIlNpbmRy
ZSBTb3JodXMiLAorICAgICJlbWFpbCI6ICJzaW5kcmVzb3JodXNAZ21haWwuY29tIiwKKyAgICAi
dXJsIjogInNpbmRyZXNvcmh1cy5jb20iCisgIH0sCisgICJmaWxlcyI6IFsKKyAgICAiaW5kZXgu
Y3NzIgorICBdLAorICAia2V5d29yZHMiOiBbCisgICAgInRvZG9tdmMiLAorICAgICJ0YXN0ZWpz
IiwKKyAgICAiYXBwIiwKKyAgICAidG9kbyIsCisgICAgInRlbXBsYXRlIiwKKyAgICAiY3NzIiwK
KyAgICAic3R5bGUiLAorICAgICJzdHlsZXNoZWV0IgorICBdCit9CmRpZmYgLS1naXQgYS9QZXJm
b3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1l
eGFtcGxlcy9pbmZlcm5vL25vZGVfbW9kdWxlcy90b2RvbXZjLWFwcC1jc3MvcmVhZG1lLm1kIGIv
UGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1
cmUtZXhhbXBsZXMvaW5mZXJuby9ub2RlX21vZHVsZXMvdG9kb212Yy1hcHAtY3NzL3JlYWRtZS5t
ZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi42ZGRiZWJmMDI0YzA0YWViNjAyMGNhZjEzMWEyZWQwMzE4OTA4MGE1Ci0t
LSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMv
dG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvaW5mZXJuby9ub2RlX21vZHVsZXMvdG9kb212
Yy1hcHAtY3NzL3JlYWRtZS5tZApAQCAtMCwwICsxLDI4IEBACisjIHRvZG9tdmMtYXBwLWNzcwor
Cis+IENTUyBmb3IgVG9kb01WQyBhcHBzCisKKyFbXShzY3JlZW5zaG90LnBuZykKKworCisjIyBJ
bnN0YWxsCisKKworYGBgCiskIG5wbSBpbnN0YWxsIC0tc2F2ZSB0b2RvbXZjLWFwcC1jc3MKK2Bg
YAorCisKKyMjIEdldHRpbmcgc3RhcnRlZAorCitgYGBodG1sCis8bGluayByZWw9InN0eWxlc2hl
ZXQiIGhyZWY9Im5vZGVfbW9kdWxlcy90b2RvbXZjLWFwcC1jc3MvaW5kZXguY3NzIj4KK2BgYAor
CitTZWUgdGhlIFtUb2RvTVZDIGFwcCB0ZW1wbGF0ZV0oaHR0cHM6Ly9naXRodWIuY29tL3Rhc3Rl
anMvdG9kb212Yy1hcHAtdGVtcGxhdGUpLgorCisKKworIyMgTGljZW5zZQorCis8YSByZWw9Imxp
Y2Vuc2UiIGhyZWY9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LzQuMC9k
ZWVkLmVuX1VTIj48aW1nIGFsdD0iQ3JlYXRpdmUgQ29tbW9ucyBMaWNlbnNlIiBzdHlsZT0iYm9y
ZGVyLXdpZHRoOjAiIHNyYz0iaHR0cDovL2kuY3JlYXRpdmVjb21tb25zLm9yZy9sL2J5LzQuMC84
MHgxNS5wbmciIC8+PC9hPjxiciAvPlRoaXMgPHNwYW4geG1sbnM6ZGN0PSJodHRwOi8vcHVybC5v
cmcvZGMvdGVybXMvIiBocmVmPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvSW50ZXJhY3Rp
dmVSZXNvdXJjZSIgcmVsPSJkY3Q6dHlwZSI+d29yazwvc3Bhbj4gYnkgPGEgeG1sbnM6Y2M9Imh0
dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIgaHJlZj0iaHR0cDovL3NpbmRyZXNvcmh1cy5j
b20iIHByb3BlcnR5PSJjYzphdHRyaWJ1dGlvbk5hbWUiIHJlbD0iY2M6YXR0cmlidXRpb25VUkwi
PlNpbmRyZSBTb3JodXM8L2E+IGlzIGxpY2Vuc2VkIHVuZGVyIGEgPGEgcmVsPSJsaWNlbnNlIiBo
cmVmPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS80LjAvZGVlZC5lbl9V
UyI+Q3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbiA0LjAgSW50ZXJuYXRpb25hbCBMaWNlbnNl
PC9hPi4KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2Vz
L3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2luZmVybm8vbm9kZV9tb2R1bGVzL3RvZG9t
dmMtY29tbW9uL2Jhc2UuY3NzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJj
ZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvaW5mZXJuby9ub2RlX21vZHVsZXMvdG9k
b212Yy1jb21tb24vYmFzZS5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGQyNWQzYzg0YWM2YzZhZWYyNmI5Njgz
YTJiYzEwYzYxZjk2MGM4ZgotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3Bl
ZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2luZmVybm8v
bm9kZV9tb2R1bGVzL3RvZG9tdmMtY29tbW9uL2Jhc2UuY3NzCkBAIC0wLDAgKzEsMTQxIEBACito
ciB7CisgICAgbWFyZ2luOiAyMHB4IDA7CisgICAgYm9yZGVyOiAwOworICAgIGJvcmRlci10b3A6
IDFweCBkYXNoZWQgI2M1YzVjNTsKKyAgICBib3JkZXItYm90dG9tOiAxcHggZGFzaGVkICNmN2Y3
Zjc7Cit9CisKKy5sZWFybiBhIHsKKyAgICBmb250LXdlaWdodDogbm9ybWFsOworICAgIHRleHQt
ZGVjb3JhdGlvbjogbm9uZTsKKyAgICBjb2xvcjogI2I4M2Y0NTsKK30KKworLmxlYXJuIGE6aG92
ZXIgeworICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworICAgIGNvbG9yOiAjNzg3ZTdl
OworfQorCisubGVhcm4gaDMsCisubGVhcm4gaDQsCisubGVhcm4gaDUgeworICAgIG1hcmdpbjog
MTBweCAwOworICAgIGZvbnQtd2VpZ2h0OiA1MDA7CisgICAgbGluZS1oZWlnaHQ6IDEuMjsKKyAg
ICBjb2xvcjogIzAwMDsKK30KKworLmxlYXJuIGgzIHsKKyAgICBmb250LXNpemU6IDI0cHg7Cit9
CisKKy5sZWFybiBoNCB7CisgICAgZm9udC1zaXplOiAxOHB4OworfQorCisubGVhcm4gaDUgewor
ICAgIG1hcmdpbi1ib3R0b206IDA7CisgICAgZm9udC1zaXplOiAxNHB4OworfQorCisubGVhcm4g
dWwgeworICAgIHBhZGRpbmc6IDA7CisgICAgbWFyZ2luOiAwIDAgMzBweCAyNXB4OworfQorCisu
bGVhcm4gbGkgeworICAgIGxpbmUtaGVpZ2h0OiAyMHB4OworfQorCisubGVhcm4gcCB7CisgICAg
Zm9udC1zaXplOiAxNXB4OworICAgIGZvbnQtd2VpZ2h0OiAzMDA7CisgICAgbGluZS1oZWlnaHQ6
IDEuMzsKKyAgICBtYXJnaW4tdG9wOiAwOworICAgIG1hcmdpbi1ib3R0b206IDA7Cit9CisKKyNp
c3N1ZS1jb3VudCB7CisgICAgZGlzcGxheTogbm9uZTsKK30KKworLnF1b3RlIHsKKyAgICBib3Jk
ZXI6IG5vbmU7CisgICAgbWFyZ2luOiAyMHB4IDAgNjBweCAwOworfQorCisucXVvdGUgcCB7Cisg
ICAgZm9udC1zdHlsZTogaXRhbGljOworfQorCisucXVvdGUgcDpiZWZvcmUgeworICAgIGNvbnRl
bnQ6ICfigJwnOworICAgIGZvbnQtc2l6ZTogNTBweDsKKyAgICBvcGFjaXR5OiAuMTU7CisgICAg
cG9zaXRpb246IGFic29sdXRlOworICAgIHRvcDogLTIwcHg7CisgICAgbGVmdDogM3B4OworfQor
CisucXVvdGUgcDphZnRlciB7CisgICAgY29udGVudDogJ+KAnSc7CisgICAgZm9udC1zaXplOiA1
MHB4OworICAgIG9wYWNpdHk6IC4xNTsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgYm90
dG9tOiAtNDJweDsKKyAgICByaWdodDogM3B4OworfQorCisucXVvdGUgZm9vdGVyIHsKKyAgICBw
b3NpdGlvbjogYWJzb2x1dGU7CisgICAgYm90dG9tOiAtNDBweDsKKyAgICByaWdodDogMDsKK30K
KworLnF1b3RlIGZvb3RlciBpbWcgeworICAgIGJvcmRlci1yYWRpdXM6IDNweDsKK30KKworLnF1
b3RlIGZvb3RlciBhIHsKKyAgICBtYXJnaW4tbGVmdDogNXB4OworICAgIHZlcnRpY2FsLWFsaWdu
OiBtaWRkbGU7Cit9CisKKy5zcGVlY2gtYnViYmxlIHsKKyAgICBwb3NpdGlvbjogcmVsYXRpdmU7
CisgICAgcGFkZGluZzogMTBweDsKKyAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIC4wNCk7
CisgICAgYm9yZGVyLXJhZGl1czogNXB4OworfQorCisuc3BlZWNoLWJ1YmJsZTphZnRlciB7Cisg
ICAgY29udGVudDogJyc7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIHRvcDogMTAwJTsK
KyAgICByaWdodDogMzBweDsKKyAgICBib3JkZXI6IDEzcHggc29saWQgdHJhbnNwYXJlbnQ7Cisg
ICAgYm9yZGVyLXRvcC1jb2xvcjogcmdiYSgwLCAwLCAwLCAuMDQpOworfQorCisubGVhcm4tYmFy
ID4gLmxlYXJuIHsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgd2lkdGg6IDI3MnB4Owor
ICAgIHRvcDogOHB4OworICAgIGxlZnQ6IC0zMDBweDsKKyAgICBwYWRkaW5nOiAxMHB4OworICAg
IGJvcmRlci1yYWRpdXM6IDVweDsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1
LCAyNTUsIC42KTsKKyAgICB0cmFuc2l0aW9uLXByb3BlcnR5OiBsZWZ0OworICAgIHRyYW5zaXRp
b24tZHVyYXRpb246IDUwMG1zOworfQorCitAbWVkaWEgKG1pbi13aWR0aDogODk5cHgpIHsKKyAg
ICAubGVhcm4tYmFyIHsKKyAgICAgICAgd2lkdGg6IGF1dG87CisgICAgICAgIHBhZGRpbmctbGVm
dDogMzAwcHg7CisgICAgfQorCisgICAgLmxlYXJuLWJhciA+IC5sZWFybiB7CisgICAgICAgIGxl
ZnQ6IDhweDsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21l
dGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9pbmZlcm5vL25vZGVf
bW9kdWxlcy90b2RvbXZjLWNvbW1vbi9iYXNlLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9t
ZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvaW5mZXJuby9ub2Rl
X21vZHVsZXMvdG9kb212Yy1jb21tb24vYmFzZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MWUwMDZiYzUwMmRk
YzRjNzRmNDdiZDEzYTgzOTIyNzdmODMwZGI4Ci0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFu
Y2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBs
ZXMvaW5mZXJuby9ub2RlX21vZHVsZXMvdG9kb212Yy1jb21tb24vYmFzZS5qcwpAQCAtMCwwICsx
LDI0OSBAQAorLyogZ2xvYmFsIF8gKi8KKyhmdW5jdGlvbiAoKSB7CisgICAgJ3VzZSBzdHJpY3Qn
OworCisgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqLworICAgIC8vIFVuZGVyc2NvcmUncyBU
ZW1wbGF0ZSBNb2R1bGUKKyAgICAvLyBDb3VydGVzeSBvZiB1bmRlcnNjb3JlanMub3JnCisgICAg
dmFyIF8gPSAoZnVuY3Rpb24gKF8pIHsKKyAgICAgICAgXy5kZWZhdWx0cyA9IGZ1bmN0aW9uIChv
YmplY3QpIHsKKyAgICAgICAgICAgIGlmICghb2JqZWN0KSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIG9iamVjdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAodmFyIGFyZ3NJbmRl
eCA9IDEsIGFyZ3NMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoOyBhcmdzSW5kZXggPCBhcmdzTGVu
Z3RoOyBhcmdzSW5kZXgrKykgeworICAgICAgICAgICAgICAgIHZhciBpdGVyYWJsZSA9IGFyZ3Vt
ZW50c1thcmdzSW5kZXhdOworICAgICAgICAgICAgICAgIGlmIChpdGVyYWJsZSkgeworICAgICAg
ICAgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gaXRlcmFibGUpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChvYmplY3Rba2V5XSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb2JqZWN0W2tleV0gPSBpdGVyYWJsZVtrZXldOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICAgICAgfQorCisgICAgICAg
IC8vIEJ5IGRlZmF1bHQsIFVuZGVyc2NvcmUgdXNlcyBFUkItc3R5bGUgdGVtcGxhdGUgZGVsaW1p
dGVycywgY2hhbmdlIHRoZQorICAgICAgICAvLyBmb2xsb3dpbmcgdGVtcGxhdGUgc2V0dGluZ3Mg
dG8gdXNlIGFsdGVybmF0aXZlIGRlbGltaXRlcnMuCisgICAgICAgIF8udGVtcGxhdGVTZXR0aW5n
cyA9IHsKKyAgICAgICAgICAgIGV2YWx1YXRlICAgIDogLzwlKFtcc1xTXSs/KSU+L2csCisgICAg
ICAgICAgICBpbnRlcnBvbGF0ZSA6IC88JT0oW1xzXFNdKz8pJT4vZywKKyAgICAgICAgICAgIGVz
Y2FwZSAgICAgIDogLzwlLShbXHNcU10rPyklPi9nCisgICAgICAgIH07CisKKyAgICAgICAgLy8g
V2hlbiBjdXN0b21pemluZyBgdGVtcGxhdGVTZXR0aW5nc2AsIGlmIHlvdSBkb24ndCB3YW50IHRv
IGRlZmluZSBhbgorICAgICAgICAvLyBpbnRlcnBvbGF0aW9uLCBldmFsdWF0aW9uIG9yIGVzY2Fw
aW5nIHJlZ2V4LCB3ZSBuZWVkIG9uZSB0aGF0IGlzCisgICAgICAgIC8vIGd1YXJhbnRlZWQgbm90
IHRvIG1hdGNoLgorICAgICAgICB2YXIgbm9NYXRjaCA9IC8oLileLzsKKworICAgICAgICAvLyBD
ZXJ0YWluIGNoYXJhY3RlcnMgbmVlZCB0byBiZSBlc2NhcGVkIHNvIHRoYXQgdGhleSBjYW4gYmUg
cHV0IGludG8gYQorICAgICAgICAvLyBzdHJpbmcgbGl0ZXJhbC4KKyAgICAgICAgdmFyIGVzY2Fw
ZXMgPSB7CisgICAgICAgICAgICAiJyI6ICAgICAgIiciLAorICAgICAgICAgICAgJ1xcJzogICAg
ICdcXCcsCisgICAgICAgICAgICAnXHInOiAgICAgJ3InLAorICAgICAgICAgICAgJ1xuJzogICAg
ICduJywKKyAgICAgICAgICAgICdcdCc6ICAgICAndCcsCisgICAgICAgICAgICAnXHUyMDI4Jzog
J3UyMDI4JywKKyAgICAgICAgICAgICdcdTIwMjknOiAndTIwMjknCisgICAgICAgIH07CisKKyAg
ICAgICAgdmFyIGVzY2FwZXIgPSAvXFx8J3xccnxcbnxcdHxcdTIwMjh8XHUyMDI5L2c7CisKKyAg
ICAgICAgLy8gSmF2YVNjcmlwdCBtaWNyby10ZW1wbGF0aW5nLCBzaW1pbGFyIHRvIEpvaG4gUmVz
aWcncyBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgLy8gVW5kZXJzY29yZSB0ZW1wbGF0aW5nIGhh
bmRsZXMgYXJiaXRyYXJ5IGRlbGltaXRlcnMsIHByZXNlcnZlcyB3aGl0ZXNwYWNlLAorICAgICAg
ICAvLyBhbmQgY29ycmVjdGx5IGVzY2FwZXMgcXVvdGVzIHdpdGhpbiBpbnRlcnBvbGF0ZWQgY29k
ZS4KKyAgICAgICAgXy50ZW1wbGF0ZSA9IGZ1bmN0aW9uKHRleHQsIGRhdGEsIHNldHRpbmdzKSB7
CisgICAgICAgICAgICB2YXIgcmVuZGVyOworICAgICAgICAgICAgc2V0dGluZ3MgPSBfLmRlZmF1
bHRzKHt9LCBzZXR0aW5ncywgXy50ZW1wbGF0ZVNldHRpbmdzKTsKKworICAgICAgICAgICAgLy8g
Q29tYmluZSBkZWxpbWl0ZXJzIGludG8gb25lIHJlZ3VsYXIgZXhwcmVzc2lvbiB2aWEgYWx0ZXJu
YXRpb24uCisgICAgICAgICAgICB2YXIgbWF0Y2hlciA9IG5ldyBSZWdFeHAoWworICAgICAgICAg
ICAgICAgIChzZXR0aW5ncy5lc2NhcGUgfHwgbm9NYXRjaCkuc291cmNlLAorICAgICAgICAgICAg
ICAgIChzZXR0aW5ncy5pbnRlcnBvbGF0ZSB8fCBub01hdGNoKS5zb3VyY2UsCisgICAgICAgICAg
ICAgICAgKHNldHRpbmdzLmV2YWx1YXRlIHx8IG5vTWF0Y2gpLnNvdXJjZQorICAgICAgICAgICAg
XS5qb2luKCd8JykgKyAnfCQnLCAnZycpOworCisgICAgICAgICAgICAvLyBDb21waWxlIHRoZSB0
ZW1wbGF0ZSBzb3VyY2UsIGVzY2FwaW5nIHN0cmluZyBsaXRlcmFscyBhcHByb3ByaWF0ZWx5Lgor
ICAgICAgICAgICAgdmFyIGluZGV4ID0gMDsKKyAgICAgICAgICAgIHZhciBzb3VyY2UgPSAiX19w
Kz0nIjsKKyAgICAgICAgICAgIHRleHQucmVwbGFjZShtYXRjaGVyLCBmdW5jdGlvbihtYXRjaCwg
ZXNjYXBlLCBpbnRlcnBvbGF0ZSwgZXZhbHVhdGUsIG9mZnNldCkgeworICAgICAgICAgICAgICAg
IHNvdXJjZSArPSB0ZXh0LnNsaWNlKGluZGV4LCBvZmZzZXQpCisgICAgICAgICAgICAgICAgICAg
IC5yZXBsYWNlKGVzY2FwZXIsIGZ1bmN0aW9uKG1hdGNoKSB7IHJldHVybiAnXFwnICsgZXNjYXBl
c1ttYXRjaF07IH0pOworCisgICAgICAgICAgICAgICAgaWYgKGVzY2FwZSkgeworICAgICAgICAg
ICAgICAgICAgICBzb3VyY2UgKz0gIicrXG4oKF9fdD0oIiArIGVzY2FwZSArICIpKT09bnVsbD8n
JzpfLmVzY2FwZShfX3QpKStcbiciOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBpZiAoaW50ZXJwb2xhdGUpIHsKKyAgICAgICAgICAgICAgICAgICAgc291cmNlICs9ICInK1xu
KChfX3Q9KCIgKyBpbnRlcnBvbGF0ZSArICIpKT09bnVsbD8nJzpfX3QpK1xuJyI7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChldmFsdWF0ZSkgeworICAgICAgICAgICAg
ICAgICAgICBzb3VyY2UgKz0gIic7XG4iICsgZXZhbHVhdGUgKyAiXG5fX3ArPSciOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpbmRleCA9IG9mZnNldCArIG1hdGNoLmxlbmd0
aDsKKyAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2g7CisgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgIHNvdXJjZSArPSAiJztcbiI7CisKKyAgICAgICAgICAgIC8vIElmIGEgdmFyaWFibGUg
aXMgbm90IHNwZWNpZmllZCwgcGxhY2UgZGF0YSB2YWx1ZXMgaW4gbG9jYWwgc2NvcGUuCisgICAg
ICAgICAgICBpZiAoIXNldHRpbmdzLnZhcmlhYmxlKSBzb3VyY2UgPSAnd2l0aChvYmp8fHt9KXtc
bicgKyBzb3VyY2UgKyAnfVxuJzsKKworICAgICAgICAgICAgc291cmNlID0gInZhciBfX3QsX19w
PScnLF9faj1BcnJheS5wcm90b3R5cGUuam9pbiwiICsKKyAgICAgICAgICAgICAgICAicHJpbnQ9
ZnVuY3Rpb24oKXtfX3ArPV9fai5jYWxsKGFyZ3VtZW50cywnJyk7fTtcbiIgKworICAgICAgICAg
ICAgICAgIHNvdXJjZSArICJyZXR1cm4gX19wO1xuIjsKKworICAgICAgICAgICAgdHJ5IHsKKyAg
ICAgICAgICAgICAgICByZW5kZXIgPSBuZXcgRnVuY3Rpb24oc2V0dGluZ3MudmFyaWFibGUgfHwg
J29iaicsICdfJywgc291cmNlKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAg
ICAgICAgICBlLnNvdXJjZSA9IHNvdXJjZTsKKyAgICAgICAgICAgICAgICB0aHJvdyBlOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoZGF0YSkgcmV0dXJuIHJlbmRlcihkYXRhLCBf
KTsKKyAgICAgICAgICAgIHZhciB0ZW1wbGF0ZSA9IGZ1bmN0aW9uKGRhdGEpIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gcmVuZGVyLmNhbGwodGhpcywgZGF0YSwgXyk7CisgICAgICAgICAgICB9
OworCisgICAgICAgICAgICAvLyBQcm92aWRlIHRoZSBjb21waWxlZCBmdW5jdGlvbiBzb3VyY2Ug
YXMgYSBjb252ZW5pZW5jZSBmb3IgcHJlY29tcGlsYXRpb24uCisgICAgICAgICAgICB0ZW1wbGF0
ZS5zb3VyY2UgPSAnZnVuY3Rpb24oJyArIChzZXR0aW5ncy52YXJpYWJsZSB8fCAnb2JqJykgKyAn
KXtcbicgKyBzb3VyY2UgKyAnfSc7CisKKyAgICAgICAgICAgIHJldHVybiB0ZW1wbGF0ZTsKKyAg
ICAgICAgfTsKKworICAgICAgICByZXR1cm4gXzsKKyAgICB9KSh7fSk7CisKKyAgICBpZiAobG9j
YXRpb24uaG9zdG5hbWUgPT09ICd0b2RvbXZjLmNvbScpIHsKKyAgICAgICAgKGZ1bmN0aW9uKGks
cyxvLGcscixhLG0pe2lbJ0dvb2dsZUFuYWx5dGljc09iamVjdCddPXI7aVtyXT1pW3JdfHxmdW5j
dGlvbigpeworICAgICAgICAoaVtyXS5xPWlbcl0ucXx8W10pLnB1c2goYXJndW1lbnRzKX0saVty
XS5sPTEqbmV3IERhdGUoKTthPXMuY3JlYXRlRWxlbWVudChvKSwKKyAgICAgICAgbT1zLmdldEVs
ZW1lbnRzQnlUYWdOYW1lKG8pWzBdO2EuYXN5bmM9MTthLnNyYz1nO20ucGFyZW50Tm9kZS5pbnNl
cnRCZWZvcmUoYSxtKQorICAgICAgICB9KSh3aW5kb3csZG9jdW1lbnQsJ3NjcmlwdCcsJ2h0dHBz
Oi8vd3d3Lmdvb2dsZS1hbmFseXRpY3MuY29tL2FuYWx5dGljcy5qcycsJ2dhJyk7CisgICAgICAg
IGdhKCdjcmVhdGUnLCAnVUEtMzEwODEwNjItMScsICdhdXRvJyk7CisgICAgICAgIGdhKCdzZW5k
JywgJ3BhZ2V2aWV3Jyk7CisgICAgfQorICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovCisKKyAg
ICBmdW5jdGlvbiByZWRpcmVjdCgpIHsKKyAgICAgICAgaWYgKGxvY2F0aW9uLmhvc3RuYW1lID09
PSAndGFzdGVqcy5naXRodWIuaW8nKSB7CisgICAgICAgICAgICBsb2NhdGlvbi5ocmVmID0gbG9j
YXRpb24uaHJlZi5yZXBsYWNlKCd0YXN0ZWpzLmdpdGh1Yi5pby90b2RvbXZjJywgJ3RvZG9tdmMu
Y29tJyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBmaW5kUm9vdCgpIHsKKyAg
ICAgICAgdmFyIGJhc2UgPSBsb2NhdGlvbi5ocmVmLmluZGV4T2YoJ2V4YW1wbGVzLycpOworICAg
ICAgICByZXR1cm4gbG9jYXRpb24uaHJlZi5zdWJzdHIoMCwgYmFzZSk7CisgICAgfQorCisgICAg
ZnVuY3Rpb24gZ2V0RmlsZShmaWxlLCBjYWxsYmFjaykgeworICAgICAgICBpZiAoIWxvY2F0aW9u
Lmhvc3QpIHsKKyAgICAgICAgICAgIHJldHVybiBjb25zb2xlLmluZm8oJ01pc3MgdGhlIGluZm8g
YmFyPyBSdW4gVG9kb01WQyBmcm9tIGEgc2VydmVyIHRvIGF2b2lkIGEgY3Jvc3Mtb3JpZ2luIGVy
cm9yLicpOworICAgICAgICB9CisKKyAgICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVz
dCgpOworCisgICAgICAgIHhoci5vcGVuKCdHRVQnLCBmaW5kUm9vdCgpICsgZmlsZSwgdHJ1ZSk7
CisgICAgICAgIHhoci5zZW5kKCk7CisKKyAgICAgICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgIGlmICh4aHIuc3RhdHVzID09PSAyMDAgJiYgY2FsbGJhY2spIHsKKyAg
ICAgICAgICAgICAgICBjYWxsYmFjayh4aHIucmVzcG9uc2VUZXh0KTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBMZWFybihsZWFybkpTT04sIGNvbmZp
ZykgeworICAgICAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgTGVhcm4pKSB7CisgICAgICAgICAg
ICByZXR1cm4gbmV3IExlYXJuKGxlYXJuSlNPTiwgY29uZmlnKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHZhciB0ZW1wbGF0ZSwgZnJhbWV3b3JrOworCisgICAgICAgIGlmICh0eXBlb2YgbGVhcm5K
U09OICE9PSAnb2JqZWN0JykgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBs
ZWFybkpTT04gPSBKU09OLnBhcnNlKGxlYXJuSlNPTik7CisgICAgICAgICAgICB9IGNhdGNoIChl
KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgaWYgKGNvbmZpZykgeworICAgICAgICAgICAgdGVtcGxhdGUgPSBjb25maWcudGVt
cGxhdGU7CisgICAgICAgICAgICBmcmFtZXdvcmsgPSBjb25maWcuZnJhbWV3b3JrOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKCF0ZW1wbGF0ZSAmJiBsZWFybkpTT04udGVtcGxhdGVzKSB7Cisg
ICAgICAgICAgICB0ZW1wbGF0ZSA9IGxlYXJuSlNPTi50ZW1wbGF0ZXMudG9kb212YzsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmICghZnJhbWV3b3JrICYmIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Io
J1tkYXRhLWZyYW1ld29ya10nKSkgeworICAgICAgICAgICAgZnJhbWV3b3JrID0gZG9jdW1lbnQu
cXVlcnlTZWxlY3RvcignW2RhdGEtZnJhbWV3b3JrXScpLmRhdGFzZXQuZnJhbWV3b3JrOworICAg
ICAgICB9CisKKyAgICAgICAgdGhpcy50ZW1wbGF0ZSA9IHRlbXBsYXRlOworCisgICAgICAgIGlm
IChsZWFybkpTT04uYmFja2VuZCkgeworICAgICAgICAgICAgdGhpcy5mcmFtZXdvcmtKU09OID0g
bGVhcm5KU09OLmJhY2tlbmQ7CisgICAgICAgICAgICB0aGlzLmZyYW1ld29ya0pTT04uaXNzdWVM
YWJlbCA9IGZyYW1ld29yazsKKyAgICAgICAgICAgIHRoaXMuYXBwZW5kKHsKKyAgICAgICAgICAg
ICAgICBiYWNrZW5kOiB0cnVlCisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSBlbHNlIGlmIChs
ZWFybkpTT05bZnJhbWV3b3JrXSkgeworICAgICAgICAgICAgdGhpcy5mcmFtZXdvcmtKU09OID0g
bGVhcm5KU09OW2ZyYW1ld29ya107CisgICAgICAgICAgICB0aGlzLmZyYW1ld29ya0pTT04uaXNz
dWVMYWJlbCA9IGZyYW1ld29yazsKKyAgICAgICAgICAgIHRoaXMuYXBwZW5kKCk7CisgICAgICAg
IH0KKworICAgICAgICB0aGlzLmZldGNoSXNzdWVDb3VudCgpOworICAgIH0KKworICAgIExlYXJu
LnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbiAob3B0cykgeworICAgICAgICB2YXIgYXNpZGUg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhc2lkZScpOworICAgICAgICBhc2lkZS5pbm5lckhU
TUwgPSBfLnRlbXBsYXRlKHRoaXMudGVtcGxhdGUsIHRoaXMuZnJhbWV3b3JrSlNPTik7CisgICAg
ICAgIGFzaWRlLmNsYXNzTmFtZSA9ICdsZWFybic7CisKKyAgICAgICAgaWYgKG9wdHMgJiYgb3B0
cy5iYWNrZW5kKSB7CisgICAgICAgICAgICAvLyBSZW1vdmUgZGVtbyBsaW5rCisgICAgICAgICAg
ICB2YXIgc291cmNlTGlua3MgPSBhc2lkZS5xdWVyeVNlbGVjdG9yKCcuc291cmNlLWxpbmtzJyk7
CisgICAgICAgICAgICB2YXIgaGVhZGluZyA9IHNvdXJjZUxpbmtzLmZpcnN0RWxlbWVudENoaWxk
OworICAgICAgICAgICAgdmFyIHNvdXJjZUxpbmsgPSBzb3VyY2VMaW5rcy5sYXN0RWxlbWVudENo
aWxkOworICAgICAgICAgICAgLy8gQ29ycmVjdCBsaW5rIHBhdGgKKyAgICAgICAgICAgIHZhciBo
cmVmID0gc291cmNlTGluay5nZXRBdHRyaWJ1dGUoJ2hyZWYnKTsKKyAgICAgICAgICAgIHNvdXJj
ZUxpbmsuc2V0QXR0cmlidXRlKCdocmVmJywgaHJlZi5zdWJzdHIoaHJlZi5sYXN0SW5kZXhPZign
aHR0cCcpKSk7CisgICAgICAgICAgICBzb3VyY2VMaW5rcy5pbm5lckhUTUwgPSBoZWFkaW5nLm91
dGVySFRNTCArIHNvdXJjZUxpbmsub3V0ZXJIVE1MOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgLy8gTG9jYWxpemUgZGVtbyBsaW5rcworICAgICAgICAgICAgdmFyIGRlbW9MaW5rcyA9
IGFzaWRlLnF1ZXJ5U2VsZWN0b3JBbGwoJy5kZW1vLWxpbmsnKTsKKyAgICAgICAgICAgIEFycmF5
LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoZGVtb0xpbmtzLCBmdW5jdGlvbiAoZGVtb0xpbmspIHsK
KyAgICAgICAgICAgICAgICBpZiAoZGVtb0xpbmsuZ2V0QXR0cmlidXRlKCdocmVmJykuc3Vic3Ry
KDAsIDQpICE9PSAnaHR0cCcpIHsKKyAgICAgICAgICAgICAgICAgICAgZGVtb0xpbmsuc2V0QXR0
cmlidXRlKCdocmVmJywgZmluZFJvb3QoKSArIGRlbW9MaW5rLmdldEF0dHJpYnV0ZSgnaHJlZicp
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorCisgICAg
ICAgIGRvY3VtZW50LmJvZHkuY2xhc3NOYW1lID0gKGRvY3VtZW50LmJvZHkuY2xhc3NOYW1lICsg
JyBsZWFybi1iYXInKS50cmltKCk7CisgICAgICAgIGRvY3VtZW50LmJvZHkuaW5zZXJ0QWRqYWNl
bnRIVE1MKCdhZnRlckJlZ2luJywgYXNpZGUub3V0ZXJIVE1MKTsKKyAgICB9OworCisgICAgTGVh
cm4ucHJvdG90eXBlLmZldGNoSXNzdWVDb3VudCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFy
IGlzc3VlTGluayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpc3N1ZS1jb3VudC1saW5rJyk7
CisgICAgICAgIGlmIChpc3N1ZUxpbmspIHsKKyAgICAgICAgICAgIHZhciB1cmwgPSBpc3N1ZUxp
bmsuaHJlZi5yZXBsYWNlKCdodHRwczovL2dpdGh1Yi5jb20nLCAnaHR0cHM6Ly9hcGkuZ2l0aHVi
LmNvbS9yZXBvcycpOworICAgICAgICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgp
OworICAgICAgICAgICAgeGhyLm9wZW4oJ0dFVCcsIHVybCwgdHJ1ZSk7CisgICAgICAgICAgICB4
aHIub25sb2FkID0gZnVuY3Rpb24gKGUpIHsKKyAgICAgICAgICAgICAgICB2YXIgcGFyc2VkUmVz
cG9uc2UgPSBKU09OLnBhcnNlKGUudGFyZ2V0LnJlc3BvbnNlVGV4dCk7CisgICAgICAgICAgICAg
ICAgaWYgKHBhcnNlZFJlc3BvbnNlIGluc3RhbmNlb2YgQXJyYXkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgdmFyIGNvdW50ID0gcGFyc2VkUmVzcG9uc2UubGVuZ3RoOworICAgICAgICAgICAgICAg
ICAgICBpZiAoY291bnQgIT09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzc3VlTGlu
ay5pbm5lckhUTUwgPSAnVGhpcyBhcHAgaGFzICcgKyBjb3VudCArICcgb3BlbiBpc3N1ZXMnOwor
ICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lzc3VlLWNv
dW50Jykuc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUnOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIHhoci5zZW5kKCk7
CisgICAgICAgIH0KKyAgICB9OworCisgICAgcmVkaXJlY3QoKTsKKyAgICBnZXRGaWxlKCdsZWFy
bi5qc29uJywgTGVhcm4pOworfSkoKTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3Bl
ZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2luZmVybm8v
bm9kZV9tb2R1bGVzL3RvZG9tdmMtY29tbW9uL3BhY2thZ2UuanNvbiBiL1BlcmZvcm1hbmNlVGVz
dHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2lu
ZmVybm8vbm9kZV9tb2R1bGVzL3RvZG9tdmMtY29tbW9uL3BhY2thZ2UuanNvbgpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li41N2M2YzVmZGY2NTYyYjVlOThjMzVhN2MwMDIzZmI1MjM2OWU1MjE5Ci0tLSAvZGV2L251bGwK
KysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNo
aXRlY3R1cmUtZXhhbXBsZXMvaW5mZXJuby9ub2RlX21vZHVsZXMvdG9kb212Yy1jb21tb24vcGFj
a2FnZS5qc29uCkBAIC0wLDAgKzEsMjAgQEAKK3sKKyAgIm5hbWUiOiAidG9kb212Yy1jb21tb24i
LAorICAidmVyc2lvbiI6ICIxLjAuMyIsCisgICJkZXNjcmlwdGlvbiI6ICJDb21tb24gVG9kb01W
QyB1dGlsaXRpZXMgdXNlZCBieSBvdXIgYXBwcyIsCisgICJsaWNlbnNlIjogIk1JVCIsCisgICJy
ZXBvc2l0b3J5IjogInRhc3RlanMvdG9kb212Yy1jb21tb24iLAorICAiYXV0aG9yIjogIlRhc3Rl
SlMiLAorICAibWFpbiI6ICJiYXNlLmpzIiwKKyAgInN0eWxlIjogImJhc2UuY3NzIiwKKyAgImZp
bGVzIjogWworICAgICJiYXNlLmpzIiwKKyAgICAiYmFzZS5jc3MiCisgIF0sCisgICJrZXl3b3Jk
cyI6IFsKKyAgICAidG9kb212YyIsCisgICAgInRhc3RlanMiLAorICAgICJ1dGlsIiwKKyAgICAi
dXRpbGl0aWVzIgorICBdCit9CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21l
dGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9pbmZlcm5vL25vZGVf
bW9kdWxlcy90b2RvbXZjLWNvbW1vbi9yZWFkbWUubWQgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVk
b21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9pbmZlcm5vL25v
ZGVfbW9kdWxlcy90b2RvbXZjLWNvbW1vbi9yZWFkbWUubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2E1ZGU1MTE4
ZjNmYzc3NThlOGRkYzBhNjg2ODc0OWNlZTljYWY5NQotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZv
cm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4
YW1wbGVzL2luZmVybm8vbm9kZV9tb2R1bGVzL3RvZG9tdmMtY29tbW9uL3JlYWRtZS5tZApAQCAt
MCwwICsxLDE1IEBACisjIHRvZG9tdmMtY29tbW9uCisKKz4gQ29tbW9uIFRvZG9NVkMgdXRpbGl0
aWVzIHVzZWQgYnkgb3VyIGFwcHMKKworCisjIyBJbnN0YWxsCisKK2BgYAorJCBucG0gaW5zdGFs
bCAtLXNhdmUgdG9kb212Yy1jb21tb24KK2BgYAorCisKKyMjIExpY2Vuc2UKKworTUlUIMKpIFtU
YXN0ZUpTXShodHRwOi8vdGFzdGVqcy5jb20pCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9pbmZl
cm5vL3BhY2thZ2UuanNvbiBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2Vz
L3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2luZmVybm8vcGFja2FnZS5qc29uCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjA3NWVkNTI3YjBhNzNlYTViYzNhZDcxN2Y4ZTk4MDUxODQ2OTllYzUKLS0tIC9kZXYv
bnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZj
L2FyY2hpdGVjdHVyZS1leGFtcGxlcy9pbmZlcm5vL3BhY2thZ2UuanNvbgpAQCAtMCwwICsxLDI0
IEBACit7CisgICJwcml2YXRlIjogdHJ1ZSwKKyAgInNjcmlwdHMiOiB7CisgICAgImRldiI6ICJ3
ZWJwYWNrLWRldi1zZXJ2ZXIiLAorICAgICJidWlsZCI6ICJ3ZWJwYWNrIC1wIiwKKyAgICAidGVz
dCI6ICJjZCB0ZXN0ICYmIG5wbSB0ZXN0IgorICB9LAorICAiZGVwZW5kZW5jaWVzIjogeworICAg
ICJpbmZlcm5vIjogImJldGEzMiIsCisgICAgImluZmVybm8tY29tcG9uZW50IjogImJldGEzMiIs
CisgICAgInRvZG9tdmMtYXBwLWNzcyI6ICJeMi4wLjAiLAorICAgICJ0b2RvbXZjLWNvbW1vbiI6
ICJeMS4wLjAiCisgIH0sCisgICJkZXZEZXBlbmRlbmNpZXMiOiB7CisgICAgImJhYmVsLWNvcmUi
OiAiXjYuNS4yIiwKKyAgICAiYmFiZWwtbG9hZGVyIjogIl42LjIuMSIsCisgICAgImJhYmVsLXBs
dWdpbi1pbmZlcm5vIjogImJldGExMyIsCisgICAgImJhYmVsLXByZXNldC1lczIwMTUiOiAiXjYu
NS4wIiwKKyAgICAiYmFiZWwtcHJlc2V0LWVzMjAxNS1sb29zZSI6ICJeNy4wLjAiLAorICAgICJi
YWJlbC1wcmVzZXQtc3RhZ2UtMCI6ICJeNi41LjAiLAorICAgICJ3ZWJwYWNrIjogIl4xLjEyLjE0
IiwKKyAgICAid2VicGFjay1kZXYtc2VydmVyIjogIl4xLjE0LjEiCisgIH0KK30KZGlmZiAtLWdp
dCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0
ZWN0dXJlLWV4YW1wbGVzL2luZmVybm8vc3JjL2Jhc2UuanMgYi9QZXJmb3JtYW5jZVRlc3RzL1Nw
ZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9pbmZlcm5v
L3NyYy9iYXNlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg5YTJjYTMwYzhiNDkyNGZjYWQyM2U3NzkzZTE4MGRk
YzU5MTg1OWIKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVy
L3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9pbmZlcm5vL3NyYy9iYXNl
LmpzCkBAIC0wLDAgKzEsNDkgQEAKK2ltcG9ydCBJbmZlcm5vIGZyb20gJ2luZmVybm8nOworaW1w
b3J0IHsgc3RhdGVzIH0gZnJvbSAnLi9zaGFyZSc7CisKKy8qKgorICogU3RhdGVsZXNzIEhlYWRl
ciBjb21wb25lbnQKKyAqLworZXhwb3J0IGZ1bmN0aW9uIEhlYWQoe29uRW50ZXJ9KSB7CisgICAg
cmV0dXJuICgKKyAgICAgICAgPGhlYWRlciBjbGFzc05hbWU9ImhlYWRlciI+CisgICAgICAgICAg
ICA8aDE+dG9kb3M8L2gxPgorICAgICAgICAgICAgPGlucHV0IGNsYXNzTmFtZT0ibmV3LXRvZG8i
IGF1dG9mb2N1cyBvbmtleWRvd249eyBvbkVudGVyIH0KKyAgICAgICAgICAgICAgICBhdXRvY29t
cGxldGU9Im9mZiIgcGxhY2Vob2xkZXI9IldoYXQgbmVlZHMgdG8gYmUgZG9uZT8iCisgICAgICAg
ICAgICAvPgorICAgICAgICA8L2hlYWRlcj4KKyAgICApOworfQorCitleHBvcnQgY29uc3QgbGlu
a3MgPSBbCisgICAge2hhc2g6ICcjLycsIG5hbWU6ICdBbGwnfSwKKyAgICB7aGFzaDogJyMvYWN0
aXZlJywgbmFtZTogJ0FjdGl2ZSd9LAorICAgIHtoYXNoOiAnIy9jb21wbGV0ZWQnLCBuYW1lOiAn
Q29tcGxldGVkJ30KK107CisKKy8qKgorICogU3RhdGVsZXNzIEZvb3RlciBjb21wb25lbnQKKyAq
LworZXhwb3J0IGZ1bmN0aW9uIEZvb3Qoe2xlZnQsIGRvbmUsIHJvdXRlLCBvbkNsZWFyfSkgewor
ICAgIHJldHVybiAoCisgICAgICAgIDxmb290ZXIgY2xhc3NOYW1lPSJmb290ZXIiPgorICAgICAg
ICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT0idG9kby1jb3VudCI+CisgICAgICAgICAgICAgICAg
ICAgIDxzdHJvbmc+eyBsZWZ0IH08L3N0cm9uZz4geyBsZWZ0ID4gMSA/ICdpdGVtcycgOiAnaXRl
bScgfSBsZWZ0CisgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgIDx1bCBj
bGFzc05hbWU9ImZpbHRlcnMiPgorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBsaW5rcy5tYXAoKHtoYXNoLCBuYW1lfSkgPT4gKAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDxsaT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJl
Zj17IGhhc2ggfSBjbGFzc05hbWU9eyBuYW1lLnRvTG93ZXJDYXNlKCkgPT09IHJvdXRlID8gJ3Nl
bGVjdGVkJyA6ICcnIH0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IG5h
bWUgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICkpCisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgICAgICAgICAgIHsg
ZG9uZSA+IDAgPyAoCisgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3NOYW1lPSJjbGVh
ci1jb21wbGV0ZWQiIG9uQ2xpY2s9eyBvbkNsZWFyIH0+Q2xlYXIgY29tcGxldGVkPC9idXR0b24+
CisgICAgICAgICAgICAgICAgKSA6IG51bGwgfQorICAgICAgICAgICAgPC9mb290ZXI+CisgICAg
KTsKK30KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2Vz
L3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2luZmVybm8vc3JjL2luZGV4LmpzIGIvUGVy
Zm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUt
ZXhhbXBsZXMvaW5mZXJuby9zcmMvaW5kZXguanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODc0MTRjMGIzODcxOTE5
YTczOTk5NjhjNmZiMTJkN2FlYjFkMjMzOQotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNl
VGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVz
L2luZmVybm8vc3JjL2luZGV4LmpzCkBAIC0wLDAgKzEsMTEyIEBACitpbXBvcnQgSW5mZXJubyBm
cm9tICdpbmZlcm5vJzsKK2ltcG9ydCBDb21wb25lbnQgZnJvbSAnaW5mZXJuby1jb21wb25lbnQn
OworaW1wb3J0IHsgRU5URVIsIGZpbHRlcnMsIHJlYWQgfSBmcm9tICcuL3NoYXJlJzsKK2ltcG9y
dCB7IEhlYWQsIEZvb3QgfSBmcm9tICcuL2Jhc2UnOworaW1wb3J0IE1vZGVsIGZyb20gJy4vbW9k
ZWwnOworaW1wb3J0IEl0ZW0gZnJvbSAnLi9pdGVtJzsKKworY29uc3QgeyByZW5kZXIgfSA9IElu
ZmVybm87Citjb25zdCBtb2RlbCA9IG5ldyBNb2RlbCgpOworCitjbGFzcyBBcHAgZXh0ZW5kcyBD
b21wb25lbnQgeworICAgIHN0YXRlID0geworICAgICAgICByb3V0ZTogcmVhZCgpLAorICAgICAg
ICB0b2RvczogbW9kZWwuZ2V0KCkKKyAgICB9OworCisgICAgdXBkYXRlID0gYXJyID0+IHRoaXMu
c2V0U3RhdGUoe3RvZG9zOiBhcnJ9KTsKKworICAgIGNvbXBvbmVudFdpbGxNb3VudCA9ICgpID0+
IHsKKyAgICAgICAgd2luZG93Lm9uaGFzaGNoYW5nZSA9ICgpID0+IHRoaXMuc2V0U3RhdGUoe3Jv
dXRlOiByZWFkKCl9KTsKKyAgICB9OworCisgICAgYWRkID0gZSA9PiB7CisgICAgICAgIGlmIChl
LndoaWNoICE9PSBFTlRFUikgcmV0dXJuOworCisgICAgICAgIGNvbnN0IHZhbCA9IGUudGFyZ2V0
LnZhbHVlLnRyaW0oKTsKKyAgICAgICAgaWYgKCF2YWwpIHJldHVybjsKKworICAgICAgICBlLnRh
cmdldC52YWx1ZSA9ICcnOworICAgICAgICB0aGlzLnVwZGF0ZSgKKyAgICAgICAgICAgIG1vZGVs
LmFkZCh2YWwpCisgICAgICAgICk7CisgICAgfTsKKworICAgIGVkaXQgPSAodG9kbywgdmFsKSA9
PiB7CisgICAgICAgIHZhbCA9IHZhbC50cmltKCk7CisgICAgICAgIGlmICh2YWwubGVuZ3RoKSB7
CisgICAgICAgICAgICB0aGlzLnVwZGF0ZSgKKyAgICAgICAgICAgICAgICBtb2RlbC5wdXQodG9k
bywge3RpdGxlOiB2YWwsIGVkaXRpbmc6IDB9KQorICAgICAgICAgICAgKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIHRoaXMucmVtb3ZlKHRvZG8pOworICAgICAgICB9CisgICAgfTsK
KworICAgIGZvY3VzID0gdG9kbyA9PiB0aGlzLnVwZGF0ZSgKKyAgICAgICAgbW9kZWwucHV0KHRv
ZG8sIHtlZGl0aW5nOiAxfSkKKyAgICApOworCisgICAgYmx1ciA9IHRvZG8gPT4gdGhpcy51cGRh
dGUoCisgICAgICAgIG1vZGVsLnB1dCh0b2RvLCB7ZWRpdGluZzogMH0pCisgICAgKTsKKworICAg
IHJlbW92ZSA9IHRvZG8gPT4gdGhpcy51cGRhdGUoCisgICAgICAgIG1vZGVsLmRlbCh0b2RvKQor
ICAgICk7CisKKyAgICB0b2dnbGVPbmUgPSB0b2RvID0+IHRoaXMudXBkYXRlKAorICAgICAgICBt
b2RlbC50b2dnbGUodG9kbykKKyAgICApOworCisgICAgdG9nZ2xlQWxsID0gZXYgPT4gdGhpcy51
cGRhdGUoCisgICAgICAgIG1vZGVsLnRvZ2dsZUFsbChldi50YXJnZXQuY2hlY2tlZCkKKyAgICAp
OworCisgICAgY2xlYXJDb21wbGV0ZWQgPSAoKSA9PiB0aGlzLnVwZGF0ZSgKKyAgICAgICAgbW9k
ZWwuY2xlYXJDb21wbGV0ZWQoKQorICAgICk7CisKKyAgICByZW5kZXIoXywge3RvZG9zLCByb3V0
ZX0pIHsKKyAgICAgICAgY29uc3QgbnVtID0gdG9kb3MubGVuZ3RoOworICAgICAgICBjb25zdCBz
aG93biA9IHRvZG9zLmZpbHRlcihmaWx0ZXJzW3JvdXRlXSk7CisgICAgICAgIGNvbnN0IG51bURv
bmUgPSB0b2Rvcy5maWx0ZXIoZmlsdGVycy5jb21wbGV0ZWQpLmxlbmd0aDsKKyAgICAgICAgY29u
c3QgbnVtQWN0ID0gbnVtIC0gbnVtRG9uZTsKKworICAgICAgICByZXR1cm4gKAorICAgICAgICAg
ICAgPGRpdj4KKyAgICAgICAgICAgICAgICA8SGVhZCBvbkVudGVyPXsgdGhpcy5hZGQgfSAvPgor
CisgICAgICAgICAgICAgICAgeyBudW0gPyAoCisgICAgICAgICAgICAgICAgICAgIDxzZWN0aW9u
IGNsYXNzTmFtZT0ibWFpbiI+CisgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3NO
YW1lPSJ0b2dnbGUtYWxsIiB0eXBlPSJjaGVja2JveCIKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBvbkNsaWNrPXsgdGhpcy50b2dnbGVBbGwgfSBjaGVja2VkPXsgbnVtQWN0ID09PSAwIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgIC8+CisKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1
bCBjbGFzc05hbWU9InRvZG8tbGlzdCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93bi5tYXAodCA9PgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gZGF0YT17dH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBvbkJsdXI9eyAoKSA9PiB0aGlzLmJsdXIodCkgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uRm9jdXM9eyAoKSA9PiB0
aGlzLmZvY3VzKHQpIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
b0RlbGV0ZT17ICgpID0+IHRoaXMucmVtb3ZlKHQpIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkb1NhdmU9eyB2YWwgPT4gdGhpcy5lZGl0KHQsIHZhbCkgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvVG9nZ2xlPXsgKCkgPT4gdGhp
cy50b2dnbGVPbmUodCkgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz4K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICAgICAgICAgICAg
ICAgIDwvc2VjdGlvbj4KKyAgICAgICAgICAgICAgICApIDogbnVsbCB9CisKKyAgICAgICAgICAg
ICAgICB7IChudW1BY3QgfHwgbnVtRG9uZSkgPyAoCisgICAgICAgICAgICAgICAgICAgIDxGb290
IG9uQ2xlYXI9eyB0aGlzLmNsZWFyQ29tcGxldGVkIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IGxlZnQ9e251bUFjdH0gZG9uZT17bnVtRG9uZX0gcm91dGU9e3JvdXRlfQorICAgICAgICAgICAg
ICAgICAgICAvPgorICAgICAgICAgICAgICAgICkgOiBudWxsIH0KKyAgICAgICAgICAgIDwvZGl2
PgorICAgICAgICApCisgICAgfQorfQorCityZW5kZXIoPEFwcCAvPiwgZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoJ2FwcCcpKTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0
ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2luZmVybm8vc3JjL2l0
ZW0uanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2Fy
Y2hpdGVjdHVyZS1leGFtcGxlcy9pbmZlcm5vL3NyYy9pdGVtLmpzCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU3Zjhi
MWQwZThiMDkwYjk2YzY4NWE5NzExMDg5ZDlkYzAwMzgzZDgKLS0tIC9kZXYvbnVsbAorKysgYi9Q
ZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVy
ZS1leGFtcGxlcy9pbmZlcm5vL3NyYy9pdGVtLmpzCkBAIC0wLDAgKzEsNTggQEAKK2ltcG9ydCBJ
bmZlcm5vIGZyb20gJ2luZmVybm8nOworaW1wb3J0IENvbXBvbmVudCBmcm9tICdpbmZlcm5vLWNv
bXBvbmVudCc7CitpbXBvcnQgeyBFU0NBUEUsIEVOVEVSLCBpc0VxdWFsIH0gZnJvbSAnLi9zaGFy
ZSc7CisKK2V4cG9ydCBkZWZhdWx0IGNsYXNzIEl0ZW0gZXh0ZW5kcyBDb21wb25lbnQgeworICAg
IGNvbnN0cnVjdG9yKHtkYXRhLCAuLi5wcm9wc30pIHsKKyAgICAgICAgc3VwZXIocHJvcHMpOwor
ICAgICAgICB0aGlzLnRvZG8gPSBkYXRhOworICAgICAgICB0aGlzLnN0YXRlID0ge3RleHQ6IGRh
dGEudGl0bGV9OworICAgICAgICB0aGlzLmVkaXRvciA9IG51bGw7CisgICAgfQorCisgICAgY29t
cG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9ICh7ZGF0YX0pID0+IHRoaXMuc2V0VGV4dChkYXRhLnRp
dGxlKTsKKyAgICBzaG91bGRDb21wb25lbnRVcGRhdGUgPSAoe2RhdGF9LCB7dGV4dH0pID0+ICEo
aXNFcXVhbChkYXRhLCB0aGlzLnRvZG8pICYmIHRleHQgPT09IHRoaXMuc3RhdGUudGV4dCk7Cisg
ICAgY29tcG9uZW50V2lsbFVwZGF0ZSA9ICh7ZGF0YX0pID0+ICh0aGlzLnRvZG8gPSBkYXRhKTsK
KyAgICBjb21wb25lbnREaWRVcGRhdGUgPSAoKSA9PiB0aGlzLmVkaXRvci5mb2N1cygpOworCisg
ICAgc2V0VGV4dCA9IHRleHQgPT4gdGhpcy5zZXRTdGF0ZSh7dGV4dH0pOworCisgICAgcmVuZGVy
KHtkb1RvZ2dsZSwgZG9EZWxldGUsIGRvU2F2ZSwgb25CbHVyLCBvbkZvY3VzfSwge3RleHR9KSB7
CisgICAgICAgIGNvbnN0IHt0aXRsZSwgY29tcGxldGVkLCBlZGl0aW5nfSA9IHRoaXMudG9kbzsK
KworICAgICAgICBjb25zdCBjbHMgPSBbXTsKKyAgICAgICAgZWRpdGluZyAmJiBjbHMucHVzaCgn
ZWRpdGluZycpOworICAgICAgICBjb21wbGV0ZWQgJiYgY2xzLnB1c2goJ2NvbXBsZXRlZCcpOwor
CisgICAgICAgIGNvbnN0IGhhbmRsZUtleWRvd24gPSBlID0+IHsKKyAgICAgICAgICAgIGlmIChl
LndoaWNoID09PSBFU0NBUEUpIHJldHVybiBvbkJsdXIoKTsKKyAgICAgICAgICAgIGlmIChlLndo
aWNoID09PSBFTlRFUikgcmV0dXJuIGRvU2F2ZSh0ZXh0KTsKKyAgICAgICAgfTsKKworICAgICAg
ICAvLyB0bXAgZml4CisgICAgICAgIGNvbnN0IGhhbmRsZUJsdXIgPSAoKSA9PiBkb1NhdmUodGV4
dCk7CisgICAgICAgIGNvbnN0IGhhbmRsZUlucHV0ID0gZSA9PiB0aGlzLnNldFRleHQoZS50YXJn
ZXQudmFsdWUpOworCisgICAgICAgIHJldHVybiAoCisgICAgICAgICAgICA8bGkgY2xhc3NOYW1l
PXsgY2xzLmpvaW4oJyAnKSB9PgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSJ2aWV3
Ij4KKyAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzTmFtZT0idG9nZ2xlIiB0eXBlPSJj
aGVja2JveCIKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9eyBjb21wbGV0ZWQgfSBv
bkNsaWNrPXsgZG9Ub2dnbGUgfQorICAgICAgICAgICAgICAgICAgICAvPgorCisgICAgICAgICAg
ICAgICAgICAgIDxsYWJlbCBvbmRibGNsaWNrPXsgb25Gb2N1cyB9PnsgdGl0bGUgfTwvbGFiZWw+
CisKKyAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9ImRlc3Ryb3kiIG9uQ2xp
Y2s9eyBkb0RlbGV0ZSB9PjwvYnV0dG9uPgorICAgICAgICAgICAgICAgIDwvZGl2PgorCisgICAg
ICAgICAgICAgICAgPGlucHV0IGNsYXNzTmFtZT0iZWRpdCIKKyAgICAgICAgICAgICAgICAgICAg
cmVmPXtlbCA9PiB7IHRoaXMuZWRpdG9yID0gZWwgfX0KKyAgICAgICAgICAgICAgICAgICAgdmFs
dWU9eyBlZGl0aW5nICYmIHRleHQgfQorICAgICAgICAgICAgICAgICAgICBvbmJsdXI9eyBoYW5k
bGVCbHVyIH0KKyAgICAgICAgICAgICAgICAgICAgb25pbnB1dD17IGhhbmRsZUlucHV0IH0KKyAg
ICAgICAgICAgICAgICAgICAgb25rZXlkb3duPXsgaGFuZGxlS2V5ZG93biB9CisgICAgICAgICAg
ICAgICAgLz4KKyAgICAgICAgICAgIDwvbGk+CisgICAgICAgICk7CisgICAgfQorfQpkaWZmIC0t
Z2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNo
aXRlY3R1cmUtZXhhbXBsZXMvaW5mZXJuby9zcmMvbW9kZWwuanMgYi9QZXJmb3JtYW5jZVRlc3Rz
L1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9pbmZl
cm5vL3NyYy9tb2RlbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MmVhZjQ2NjM1YWRjYjczZWZlNTlkNWU4ZGVi
NDBlMTVkNzQwNjI0Ci0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9t
ZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvaW5mZXJuby9zcmMv
bW9kZWwuanMKQEAgLTAsMCArMSwzNiBAQAoraW1wb3J0IHsgYXNzaWduLCBpc0VxdWFsIH0gZnJv
bSAnLi9zaGFyZSc7CisKK2NvbnN0IFNUT1IgPSB7fTsKK2NvbnN0IFNUT1JfSUQgPSAndG9kb3Mt
aW5mZXJubyc7CisKK2V4cG9ydCBkZWZhdWx0IGNsYXNzIE1vZGVsIHsKKyAgICBnZXQgPSAoKSA9
PiAodGhpcy5kYXRhID0gSlNPTi5wYXJzZShTVE9SW1NUT1JfSURdIHx8ICdbXScpKQorCisgICAg
c2V0ID0gYXJyID0+IHsKKyAgICAgICAgdGhpcy5kYXRhID0gYXJyIHx8IHRoaXMuZGF0YSB8fCBb
XTsKKyAgICAgICAgU1RPUltTVE9SX0lEXSA9IEpTT04uc3RyaW5naWZ5KHRoaXMuZGF0YSk7Cisg
ICAgICAgIHJldHVybiB0aGlzLmRhdGE7CisgICAgfQorCisgICAgYWRkID0gc3RyID0+IHRoaXMu
c2V0KAorICAgICAgICB0aGlzLmRhdGEuY29uY2F0KHt0aXRsZTogc3RyLCBjb21wbGV0ZWQ6IGZh
bHNlfSkKKyAgICApCisKKyAgICBwdXQgPSAodG9kbywgb2JqKSA9PiB0aGlzLnNldCgKKyAgICAg
ICAgdGhpcy5kYXRhLm1hcCh0ID0+IGlzRXF1YWwodCwgdG9kbykgPyBhc3NpZ24odG9kbywgb2Jq
KSA6IHQpCisgICAgKQorCisgICAgZGVsID0gdG9kbyA9PiB0aGlzLnNldCgKKyAgICAgICAgdGhp
cy5kYXRhLmZpbHRlcih0ID0+ICFpc0VxdWFsKHQsIHRvZG8pKQorICAgICkKKworICAgIHRvZ2ds
ZSA9IHRvZG8gPT4gdGhpcy5wdXQodG9kbywge2NvbXBsZXRlZDogIXRvZG8uY29tcGxldGVkfSkK
KworICAgIHRvZ2dsZUFsbCA9IGNvbXBsZXRlZCA9PiB0aGlzLnNldCgKKyAgICAgICAgdGhpcy5k
YXRhLm1hcCh0ID0+ICh7Li4udCwgY29tcGxldGVkfSkpCisgICAgKQorCisgICAgY2xlYXJDb21w
bGV0ZWQgPSAoKSA9PiB0aGlzLnNldCgKKyAgICAgICAgdGhpcy5kYXRhLmZpbHRlcih0ID0+ICF0
LmNvbXBsZXRlZCkKKyAgICApCit9CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVk
b21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9pbmZlcm5vL3Ny
Yy9zaGFyZS5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9t
dmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2luZmVybm8vc3JjL3NoYXJlLmpzCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjllN2Q5NjJiOGYxNzc0NzAyZDc2NTQ2Y2ExMDlhZDk3OTI0NGEzZTAKLS0tIC9kZXYvbnVsbAor
KysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hp
dGVjdHVyZS1leGFtcGxlcy9pbmZlcm5vL3NyYy9zaGFyZS5qcwpAQCAtMCwwICsxLDU4IEBACisv
KioKKyAqIFNoYXJlZCBmdW5jcy92YWx1ZXMKKyAqLworCitleHBvcnQgY29uc3QgRU5URVIgPSAx
MzsKK2V4cG9ydCBjb25zdCBFU0NBUEUgPSAyNzsKKworZXhwb3J0IGNvbnN0IGZpbHRlcnMgPSB7
CisgICAgYWxsOiB0ID0+IHRydWUsCisgICAgYWN0aXZlOiB0ID0+ICF0LmNvbXBsZXRlZCwKKyAg
ICBjb21wbGV0ZWQ6IHQgPT4gdC5jb21wbGV0ZWQKK30KKworLyoqCisgKiBSZWFkIHRoZSBgbG9j
YXRpb24uaGFzaGAgdmFsdWUKKyAqIEByZXR1cm4ge1N0cmluZ30KKyAqLworZXhwb3J0IGZ1bmN0
aW9uIHJlYWQoKSB7CisgICAgcmV0dXJuIGxvY2F0aW9uLmhhc2gucmVwbGFjZSgnIy8nLCAnJykg
fHwgJ2FsbCc7Cit9CisKKy8qKgorICogTW9kaWZpZWQgYE9iamVjdC5hc3NpZ25gIHNoaW0KKyAq
IC0gYWx3YXlzIHdyaXRlcyB0byBuZXcgb2JqZWN0CisgKiBAcmV0dXJuIHtPYmplY3R9CisgKi8K
K2V4cG9ydCBmdW5jdGlvbiBhc3NpZ24oKSB7CisgICAgbGV0IHNyYzsKKyAgICBsZXQgdGFyID0g
e307CisgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspIHsKKyAg
ICAgICAgc3JjID0gT2JqZWN0KGFyZ3VtZW50c1tzXSk7CisgICAgICAgIGZvciAoY29uc3QgayBp
biBzcmMpIHsKKyAgICAgICAgICAgIHRhcltrXSA9IHNyY1trXTsKKyAgICAgICAgfQorICAgIH0K
KyAgICByZXR1cm4gdGFyOworfQorCisvKioKKyAqIEFyZSB0d28gT2JqZWN0cyBlcXVhbCB2YWx1
ZXM/CisgKiBAcGFyYW0gIHtPYmplY3R9IGEKKyAqIEBwYXJhbSAge09iamVjdH0gYgorICogQHJl
dHVybiB7Qm9vbGVhbn0KKyAqLworZXhwb3J0IGZ1bmN0aW9uIGlzRXF1YWwoYSwgYikgeworICAg
IC8vIENyZWF0ZSBhcnJheXMgb2YgcHJvcGVydHkgbmFtZXMKKyAgICBjb25zdCBhUHJvcHMgPSBP
YmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhhKTsKKyAgICBjb25zdCBiUHJvcHMgPSBPYmplY3Qu
Z2V0T3duUHJvcGVydHlOYW1lcyhiKTsKKworICAgIGlmIChhUHJvcHMubGVuZ3RoICE9PSBiUHJv
cHMubGVuZ3RoKSByZXR1cm4gZmFsc2U7CisKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFQcm9w
cy5sZW5ndGg7IGkrKykgeworICAgICAgICBjb25zdCBrID0gYVByb3BzW2ldOworICAgICAgICBp
ZiAoYVtrXSAhPT0gYltrXSkgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVl
OworfQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMv
dG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvaW5mZXJuby93ZWJwYWNrLmNvbmZpZy5qcyBi
L1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0
dXJlLWV4YW1wbGVzL2luZmVybm8vd2VicGFjay5jb25maWcuanMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzdiM2U2
ZjdmZDY4YmJjNjkzZjJlMzg1YzBjZTIxYWQ0M2UwNDViZAotLS0gL2Rldi9udWxsCisrKyBiL1Bl
cmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJl
LWV4YW1wbGVzL2luZmVybm8vd2VicGFjay5jb25maWcuanMKQEAgLTAsMCArMSwzMSBAQAorY29u
c3Qgd2VicGFjayA9IHJlcXVpcmUoJ3dlYnBhY2snKTsKKworbW9kdWxlLmV4cG9ydHMgPSB7Cisg
ICAgZW50cnk6ICcuL3NyYy9pbmRleC5qcycsCisgICAgb3V0cHV0OiB7CisgICAgICAgIHBhdGg6
ICcuL2Rpc3QnLAorICAgICAgICBwdWJsaWNQYXRoOiAnZGlzdCcsCisgICAgICAgIGZpbGVuYW1l
OiAnYnVuZGxlLmpzJworICAgIH0sCisgICAgbW9kdWxlOiB7CisgICAgICAgIGxvYWRlcnM6IFt7
CisgICAgICAgICAgICB0ZXN0OiAvXC5qc3g/JC8sCisgICAgICAgICAgICBleGNsdWRlOiAvbm9k
ZV9tb2R1bGVzLywKKyAgICAgICAgICAgIGxvYWRlcjogJ2JhYmVsJywKKyAgICAgICAgICAgIHF1
ZXJ5OiB7CisgICAgICAgICAgICAgICAgcHJlc2V0czogWydlczIwMTUtbG9vc2UnLCAnc3RhZ2Ut
MCddLAorICAgICAgICAgICAgICAgIHBsdWdpbnM6IFsnc3ludGF4LWpzeCcsICdpbmZlcm5vJ10K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfV0KKyAgICB9LAorICAgIHBsdWdpbnM6IFsKKyAgICAg
ICAgbmV3IHdlYnBhY2suRGVmaW5lUGx1Z2luKHsKKyAgICAgICAgICAgICdwcm9jZXNzLmVudic6
IHsKKyAgICAgICAgICAgICAgICAnTk9ERV9FTlYnOiBKU09OLnN0cmluZ2lmeSgncHJvZHVjdGlv
bicpCisgICAgICAgICAgICB9CisgICAgICAgIH0pLAorICAgIF0sCisgICAgZGV2U2VydmVyOiB7
CisgICAgICAgIHBvcnQ6IHByb2Nlc3MuZW52LlBPUlQgfHwgODAwMAorICAgIH0KK307Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>309842</attachid>
            <date>2017-05-11 18:35:55 -0700</date>
            <delta_ts>2017-05-11 19:36:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171411-20170511183554.patch</filename>
            <type>text/plain</type>
            <size>166197</size>
            <attacher name="Addy Osmani">addyo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1ODMwCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCmluZGV4IGI5ZTE0YmUyOGRh
MmFmOTBlNjBmNGI5MTQ4OGI0NzE1ODQ0OGE2Y2IuLjJlOWMyOTI0MDg5MzQwNzRmZmZhN2UzZTFk
ZjAyN2NjYjQyZjJjM2YgMTAwNjQ0Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCisr
KyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkgQEAKKzIwMTctMDUt
MTEgIEFkZHkgT3NtYW5pICA8YWRkeW9zbWFuaUBnbWFpbC5jb20+CisKKyAgICAgICAgU3BlZWRv
bWV0ZXI6IEFkZCBhbiBJbmZlcm5vIFRvZG9NVkMgaW1wbGVtZW50YXRpb24KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MTQxMQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZHMgYSBJbmZlcm5vIGltcGxl
bSBvZiBUb2RvTVZDIHRvIFNwZWVkb21ldGVyCisKKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNv
dXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvaW5mZXJuby9kaXN0L2J1bmRsZS5q
czogQWRkZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0
ZWN0dXJlLWV4YW1wbGVzL2luZmVybm8vaW5kZXguaHRtbDogQWRkZWQuCisgICAgICAgICogU3Bl
ZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2luZmVybm8v
bm9kZV9tb2R1bGVzL3RvZG9tdmMtYXBwLWNzcy9pbmRleC5jc3M6IEFkZGVkLgorICAgICAgICAq
IFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9pbmZl
cm5vL25vZGVfbW9kdWxlcy90b2RvbXZjLWFwcC1jc3MvcGFja2FnZS5qc29uOiBBZGRlZC4KKyAg
ICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBs
ZXMvaW5mZXJuby9ub2RlX21vZHVsZXMvdG9kb212Yy1hcHAtY3NzL3JlYWRtZS5tZDogQWRkZWQu
CisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4
YW1wbGVzL2luZmVybm8vbm9kZV9tb2R1bGVzL3RvZG9tdmMtY29tbW9uL2Jhc2UuY3NzOiBBZGRl
ZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUt
ZXhhbXBsZXMvaW5mZXJuby9ub2RlX21vZHVsZXMvdG9kb212Yy1jb21tb24vYmFzZS5qczogQWRk
ZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJl
LWV4YW1wbGVzL2luZmVybm8vbm9kZV9tb2R1bGVzL3RvZG9tdmMtY29tbW9uL3BhY2thZ2UuanNv
bjogQWRkZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0
ZWN0dXJlLWV4YW1wbGVzL2luZmVybm8vbm9kZV9tb2R1bGVzL3RvZG9tdmMtY29tbW9uL3JlYWRt
ZS5tZDogQWRkZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJj
aGl0ZWN0dXJlLWV4YW1wbGVzL2luZmVybm8vcGFja2FnZS5qc29uOiBBZGRlZC4KKyAgICAgICAg
KiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvaW5m
ZXJuby9zcmMvYmFzZS5qczogQWRkZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2Vz
L3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2luZmVybm8vc3JjL2luZGV4LmpzOiBBZGRl
ZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUt
ZXhhbXBsZXMvaW5mZXJuby9zcmMvaXRlbS5qczogQWRkZWQuCisgICAgICAgICogU3BlZWRvbWV0
ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2luZmVybm8vc3JjL21v
ZGVsLmpzOiBBZGRlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9h
cmNoaXRlY3R1cmUtZXhhbXBsZXMvaW5mZXJuby9zcmMvc2hhcmUuanM6IEFkZGVkLgorICAgICAg
ICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9p
bmZlcm5vL3dlYnBhY2suY29uZmlnLmpzOiBBZGRlZC4KKwogMjAxNy0wNC0yNSAgTXlsZXMgQy4g
TWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBwZXJmb3JtYW5j
ZSB0ZXN0IGZvciBGb250Q2FjaGU6OnN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFjdGVycygpCmRpZmYg
LS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2Fy
Y2hpdGVjdHVyZS1leGFtcGxlcy9pbmZlcm5vL2Rpc3QvYnVuZGxlLmpzIGIvUGVyZm9ybWFuY2VU
ZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMv
aW5mZXJuby9kaXN0L2J1bmRsZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yYTU1ZTk3ZGRkOTFjN2U0ZTMyMWNl
ODEzMzY2MGQyMmJiZTVlNzRiCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9T
cGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvaW5mZXJu
by9kaXN0L2J1bmRsZS5qcwpAQCAtMCwwICsxLDMyNDggQEAKKy8qKioqKiovIChmdW5jdGlvbiht
b2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKKy8qKioqKiovICAgIC8vIFRoZSBtb2R1bGUg
Y2FjaGUKKy8qKioqKiovICAgIHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307CisKKy8qKioqKiov
ICAgIC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uCisvKioqKioqLyAgICBmdW5jdGlvbiBfX3dlYnBh
Y2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7CisKKy8qKioqKiovICAgICAgICAvLyBDaGVjayBpZiBt
b2R1bGUgaXMgaW4gY2FjaGUKKy8qKioqKiovICAgICAgICBpZihpbnN0YWxsZWRNb2R1bGVzW21v
ZHVsZUlkXSkKKy8qKioqKiovICAgICAgICAgICAgcmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9k
dWxlSWRdLmV4cG9ydHM7CisKKy8qKioqKiovICAgICAgICAvLyBDcmVhdGUgYSBuZXcgbW9kdWxl
IChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKQorLyoqKioqKi8gICAgICAgIHZhciBtb2R1bGUg
PSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHsKKy8qKioqKiovICAgICAgICAgICAgZXhw
b3J0czoge30sCisvKioqKioqLyAgICAgICAgICAgIGlkOiBtb2R1bGVJZCwKKy8qKioqKiovICAg
ICAgICAgICAgbG9hZGVkOiBmYWxzZQorLyoqKioqKi8gICAgICAgIH07CisKKy8qKioqKiovICAg
ICAgICAvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb24KKy8qKioqKiovICAgICAgICBtb2R1
bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRz
LCBfX3dlYnBhY2tfcmVxdWlyZV9fKTsKKworLyoqKioqKi8gICAgICAgIC8vIEZsYWcgdGhlIG1v
ZHVsZSBhcyBsb2FkZWQKKy8qKioqKiovICAgICAgICBtb2R1bGUubG9hZGVkID0gdHJ1ZTsKKwor
LyoqKioqKi8gICAgICAgIC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlCisvKioq
KioqLyAgICAgICAgcmV0dXJuIG1vZHVsZS5leHBvcnRzOworLyoqKioqKi8gICAgfQorCisKKy8q
KioqKiovICAgIC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVz
X18pCisvKioqKioqLyAgICBfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzOworCisvKioq
KioqLyAgICAvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZQorLyoqKioqKi8gICAgX193ZWJwYWNr
X3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlczsKKworLyoqKioqKi8gICAgLy8gX193ZWJw
YWNrX3B1YmxpY19wYXRoX18KKy8qKioqKiovICAgIF9fd2VicGFja19yZXF1aXJlX18ucCA9ICJk
aXN0IjsKKworLyoqKioqKi8gICAgLy8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBv
cnRzCisvKioqKioqLyAgICByZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXygwKTsKKy8qKioqKiov
IH0pCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKi8gKFsKKy8qIDAgKi8KKy8qKiovIGZ1bmN0
aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisgICAgJ3VzZSBz
dHJpY3QnOworCisgICAgdmFyIF9pbmZlcm5vID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTsKKwor
ICAgIHZhciBfaW5mZXJubzIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pbmZlcm5vKTsKKwor
ICAgIHZhciBfaW5mZXJub0NvbXBvbmVudCA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7CisKKyAg
ICB2YXIgX2luZmVybm9Db21wb25lbnQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaW5mZXJu
b0NvbXBvbmVudCk7CisKKyAgICB2YXIgX3NoYXJlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTsK
KworICAgIHZhciBfYmFzZSA9IF9fd2VicGFja19yZXF1aXJlX18oNik7CisKKyAgICB2YXIgX21v
ZGVsID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KTsKKworICAgIHZhciBfbW9kZWwyID0gX2ludGVy
b3BSZXF1aXJlRGVmYXVsdChfbW9kZWwpOworCisgICAgdmFyIF9pdGVtID0gX193ZWJwYWNrX3Jl
cXVpcmVfXyg4KTsKKworICAgIHZhciBfaXRlbTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9p
dGVtKTsKKworICAgIGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVy
biBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9CisKKyAg
ICBmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICgh
KGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3Io
IkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpOyB9IH0KKworICAgIGZ1bmN0aW9u
IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRo
cm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1
cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxs
ID09PSAib2JqZWN0IiB8fCB0eXBlb2YgY2FsbCA9PT0gImZ1bmN0aW9uIikgPyBjYWxsIDogc2Vs
ZjsgfQorCisgICAgZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlm
ICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gImZ1bmN0aW9uIiAmJiBzdXBlckNsYXNzICE9PSBudWxs
KSB7IHRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUg
bnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFz
cy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90
b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxz
ZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFz
cykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNz
LCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH0KKworICAg
IHZhciByZW5kZXIgPSBfaW5mZXJubzIuZGVmYXVsdC5yZW5kZXI7CisKKyAgICB2YXIgbW9kZWwg
PSBuZXcgX21vZGVsMi5kZWZhdWx0KCk7CisKKyAgICB2YXIgQXBwID0gZnVuY3Rpb24gKF9Db21w
b25lbnQpIHsKKyAgICAgICAgX2luaGVyaXRzKEFwcCwgX0NvbXBvbmVudCk7CisKKyAgICAgICAg
ZnVuY3Rpb24gQXBwKCkgeworICAgICAgICAgICAgdmFyIF90ZW1wLCBfdGhpcywgX3JldDsKKwor
ICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEFwcCk7CisKKyAgICAgICAgICAgIGZv
ciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbiksIF9rZXkg
PSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7CisgICAgICAgICAgICAgICAgYXJnc1tfa2V5XSA9
IGFyZ3VtZW50c1tfa2V5XTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIF9y
ZXQgPSAoX3RlbXAgPSAoX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBf
Q29tcG9uZW50LmNhbGwuYXBwbHkoX0NvbXBvbmVudCwgW3RoaXNdLmNvbmNhdChhcmdzKSkpLCBf
dGhpcyksIF90aGlzLnN0YXRlID0geworICAgICAgICAgICAgICAgIHJvdXRlOiAoMCwgX3NoYXJl
LnJlYWQpKCksCisgICAgICAgICAgICAgICAgdG9kb3M6IG1vZGVsLmdldCgpCisgICAgICAgICAg
ICB9LCBfdGhpcy51cGRhdGUgPSBmdW5jdGlvbiAoYXJyKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIF90aGlzLnNldFN0YXRlKHsgdG9kb3M6IGFyciB9KTsKKyAgICAgICAgICAgIH0sIF90aGlz
LmNvbXBvbmVudFdpbGxNb3VudCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICB3aW5k
b3cub25oYXNoY2hhbmdlID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gX3RoaXMuc2V0U3RhdGUoeyByb3V0ZTogKDAsIF9zaGFyZS5yZWFkKSgpIH0pOworICAgICAg
ICAgICAgICAgIH07CisgICAgICAgICAgICB9LCBfdGhpcy5hZGQgPSBmdW5jdGlvbiAoZSkgewor
ICAgICAgICAgICAgICAgIGlmIChlLndoaWNoICE9PSBfc2hhcmUuRU5URVIpIHJldHVybjsKKwor
ICAgICAgICAgICAgICAgIHZhciB2YWwgPSBlLnRhcmdldC52YWx1ZS50cmltKCk7CisgICAgICAg
ICAgICAgICAgaWYgKCF2YWwpIHJldHVybjsKKworICAgICAgICAgICAgICAgIGUudGFyZ2V0LnZh
bHVlID0gJyc7CisgICAgICAgICAgICAgICAgX3RoaXMudXBkYXRlKG1vZGVsLmFkZCh2YWwpKTsK
KyAgICAgICAgICAgIH0sIF90aGlzLmVkaXQgPSBmdW5jdGlvbiAodG9kbywgdmFsKSB7CisgICAg
ICAgICAgICAgICAgdmFsID0gdmFsLnRyaW0oKTsKKyAgICAgICAgICAgICAgICBpZiAodmFsLmxl
bmd0aCkgeworICAgICAgICAgICAgICAgICAgICBfdGhpcy51cGRhdGUobW9kZWwucHV0KHRvZG8s
IHsgdGl0bGU6IHZhbCwgZWRpdGluZzogMCB9KSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgX3RoaXMucmVtb3ZlKHRvZG8pOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0sIF90aGlzLmZvY3VzID0gZnVuY3Rpb24gKHRvZG8pIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gX3RoaXMudXBkYXRlKG1vZGVsLnB1dCh0b2RvLCB7IGVkaXRpbmc6
IDEgfSkpOworICAgICAgICAgICAgfSwgX3RoaXMuYmx1ciA9IGZ1bmN0aW9uICh0b2RvKSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLnVwZGF0ZShtb2RlbC5wdXQodG9kbywgeyBlZGl0
aW5nOiAwIH0pKTsKKyAgICAgICAgICAgIH0sIF90aGlzLnJlbW92ZSA9IGZ1bmN0aW9uICh0b2Rv
KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLnVwZGF0ZShtb2RlbC5kZWwodG9kbykp
OworICAgICAgICAgICAgfSwgX3RoaXMudG9nZ2xlT25lID0gZnVuY3Rpb24gKHRvZG8pIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gX3RoaXMudXBkYXRlKG1vZGVsLnRvZ2dsZSh0b2RvKSk7Cisg
ICAgICAgICAgICB9LCBfdGhpcy50b2dnbGVBbGwgPSBmdW5jdGlvbiAoZXYpIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gX3RoaXMudXBkYXRlKG1vZGVsLnRvZ2dsZUFsbChldi50YXJnZXQuY2hl
Y2tlZCkpOworICAgICAgICAgICAgfSwgX3RoaXMuY2xlYXJDb21wbGV0ZWQgPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLnVwZGF0ZShtb2RlbC5jbGVhckNvbXBs
ZXRlZCgpKTsKKyAgICAgICAgICAgIH0sIF90ZW1wKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1
cm4oX3RoaXMsIF9yZXQpOworICAgICAgICB9CisKKyAgICAgICAgQXBwLnByb3RvdHlwZS5yZW5k
ZXIgPSBmdW5jdGlvbiByZW5kZXIoXywgX3JlZikgeworICAgICAgICAgICAgdmFyIF90aGlzMiA9
IHRoaXM7CisKKyAgICAgICAgICAgIHZhciB0b2RvcyA9IF9yZWYudG9kb3MsCisgICAgICAgICAg
ICAgICAgcm91dGUgPSBfcmVmLnJvdXRlOworCisgICAgICAgICAgICB2YXIgbnVtID0gdG9kb3Mu
bGVuZ3RoOworICAgICAgICAgICAgdmFyIHNob3duID0gdG9kb3MuZmlsdGVyKF9zaGFyZS5maWx0
ZXJzW3JvdXRlXSk7CisgICAgICAgICAgICB2YXIgbnVtRG9uZSA9IHRvZG9zLmZpbHRlcihfc2hh
cmUuZmlsdGVycy5jb21wbGV0ZWQpLmxlbmd0aDsKKyAgICAgICAgICAgIHZhciBudW1BY3QgPSBu
dW0gLSBudW1Eb25lOworCisgICAgICAgICAgICByZXR1cm4gX2luZmVybm8yLmRlZmF1bHQuY3Jl
YXRlVk5vZGUoMiwgJ2RpdicsIG51bGwsIFtfaW5mZXJubzIuZGVmYXVsdC5jcmVhdGVWTm9kZSgx
NiwgX2Jhc2UuSGVhZCwgeworICAgICAgICAgICAgICAgICdvbkVudGVyJzogdGhpcy5hZGQKKyAg
ICAgICAgICAgIH0pLCBudW0gPyBfaW5mZXJubzIuZGVmYXVsdC5jcmVhdGVWTm9kZSgyLCAnc2Vj
dGlvbicsIHsKKyAgICAgICAgICAgICAgICAnY2xhc3NOYW1lJzogJ21haW4nCisgICAgICAgICAg
ICB9LCBbX2luZmVybm8yLmRlZmF1bHQuY3JlYXRlVk5vZGUoNTEyLCAnaW5wdXQnLCB7CisgICAg
ICAgICAgICAgICAgJ2NsYXNzTmFtZSc6ICd0b2dnbGUtYWxsJywKKyAgICAgICAgICAgICAgICAn
dHlwZSc6ICdjaGVja2JveCcsCisgICAgICAgICAgICAgICAgJ2NoZWNrZWQnOiBudW1BY3QgPT09
IDAKKyAgICAgICAgICAgIH0sIG51bGwsIHsKKyAgICAgICAgICAgICAgICAnb25DbGljayc6IHRo
aXMudG9nZ2xlQWxsCisgICAgICAgICAgICB9KSwgX2luZmVybm8yLmRlZmF1bHQuY3JlYXRlVk5v
ZGUoMiwgJ3VsJywgeworICAgICAgICAgICAgICAgICdjbGFzc05hbWUnOiAndG9kby1saXN0Jwor
ICAgICAgICAgICAgfSwgc2hvd24ubWFwKGZ1bmN0aW9uICh0KSB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIF9pbmZlcm5vMi5kZWZhdWx0LmNyZWF0ZVZOb2RlKDE2LCBfaXRlbTIuZGVmYXVsdCwg
eworICAgICAgICAgICAgICAgICAgICAnZGF0YSc6IHQsCisgICAgICAgICAgICAgICAgICAgICdv
bkJsdXInOiBmdW5jdGlvbiBvbkJsdXIoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gX3RoaXMyLmJsdXIodCk7CisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAg
ICAgICAgICdvbkZvY3VzJzogZnVuY3Rpb24gb25Gb2N1cygpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBfdGhpczIuZm9jdXModCk7CisgICAgICAgICAgICAgICAgICAgIH0sCisg
ICAgICAgICAgICAgICAgICAgICdkb0RlbGV0ZSc6IGZ1bmN0aW9uIGRvRGVsZXRlKCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMi5yZW1vdmUodCk7CisgICAgICAgICAg
ICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICdkb1NhdmUnOiBmdW5jdGlvbiBkb1Nh
dmUodmFsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMyLmVkaXQodCwg
dmFsKTsKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgJ2RvVG9n
Z2xlJzogZnVuY3Rpb24gZG9Ub2dnbGUoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gX3RoaXMyLnRvZ2dsZU9uZSh0KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgfSkpXSkgOiBudWxsLCBudW1BY3QgfHwgbnVtRG9uZSA/
IF9pbmZlcm5vMi5kZWZhdWx0LmNyZWF0ZVZOb2RlKDE2LCBfYmFzZS5Gb290LCB7CisgICAgICAg
ICAgICAgICAgJ29uQ2xlYXInOiB0aGlzLmNsZWFyQ29tcGxldGVkLAorICAgICAgICAgICAgICAg
ICdsZWZ0JzogbnVtQWN0LAorICAgICAgICAgICAgICAgICdkb25lJzogbnVtRG9uZSwKKyAgICAg
ICAgICAgICAgICAncm91dGUnOiByb3V0ZQorICAgICAgICAgICAgfSkgOiBudWxsXSk7CisgICAg
ICAgIH07CisKKyAgICAgICAgcmV0dXJuIEFwcDsKKyAgICB9KF9pbmZlcm5vQ29tcG9uZW50Mi5k
ZWZhdWx0KTsKKworICAgIHJlbmRlcihfaW5mZXJubzIuZGVmYXVsdC5jcmVhdGVWTm9kZSgxNiwg
QXBwKSwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FwcCcpKTsKKworLyoqKi8gfSwKKy8qIDEg
Ki8KKy8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykg
eworCisgICAgbW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpOworCisKKy8q
KiovIH0sCisvKiAyICovCisvKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFj
a19yZXF1aXJlX18pIHsKKworICAgIC8qIQorICAgICAqIGluZmVybm8gdjEuMC4wLWJldGEzMgor
ICAgICAqIChjKSAyMDE2IERvbWluaWMgR2FubmF3YXkKKyAgICAgKiBSZWxlYXNlZCB1bmRlciB0
aGUgTUlUIExpY2Vuc2UuCisgICAgICovCisgICAgKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3Rvcnkp
IHsKKyAgICAgICAgIHRydWUgPyBmYWN0b3J5KGV4cG9ydHMpIDoKKyAgICAgICAgdHlwZW9mIGRl
ZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnZXhwb3J0cyddLCBm
YWN0b3J5KSA6CisgICAgICAgIChmYWN0b3J5KChnbG9iYWwuSW5mZXJubyA9IGdsb2JhbC5JbmZl
cm5vIHx8IHt9KSkpOworICAgIH0odGhpcywgKGZ1bmN0aW9uIChleHBvcnRzKSB7ICd1c2Ugc3Ry
aWN0JzsKKworICAgIHZhciBOT19PUCA9ICckTk9fT1AnOworICAgIHZhciBFUlJPUl9NU0cgPSAn
YSBydW50aW1lIGVycm9yIG9jY3VyZWQhIFVzZSBJbmZlcm5vIGluIGRldmVsb3BtZW50IGVudmly
b25tZW50IHRvIGZpbmQgdGhlIGVycm9yLic7CisgICAgdmFyIGlzQnJvd3NlciA9IHR5cGVvZiB3
aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5kb2N1bWVudDsKKworICAgIC8vIHRoaXMg
aXMgTVVDSCBmYXN0ZXIgdGhhbiAuY29uc3RydWN0b3IgPT09IEFycmF5IGFuZCBpbnN0YW5jZW9m
IEFycmF5CisgICAgLy8gaW4gTm9kZSA3IGFuZCB0aGUgbGF0ZXIgdmVyc2lvbnMgb2YgVjgsIHNs
b3dlciBpbiBvbGRlciB2ZXJzaW9ucyB0aG91Z2gKKyAgICB2YXIgaXNBcnJheSA9IEFycmF5Lmlz
QXJyYXk7CisgICAgZnVuY3Rpb24gaXNTdGF0ZWZ1bENvbXBvbmVudChvKSB7CisgICAgICAgIHJl
dHVybiAhaXNVbmRlZmluZWQoby5wcm90b3R5cGUpICYmICFpc1VuZGVmaW5lZChvLnByb3RvdHlw
ZS5yZW5kZXIpOworICAgIH0KKyAgICBmdW5jdGlvbiBpc1N0cmluZ09yTnVtYmVyKG9iaikgewor
ICAgICAgICByZXR1cm4gaXNTdHJpbmcob2JqKSB8fCBpc051bWJlcihvYmopOworICAgIH0KKyAg
ICBmdW5jdGlvbiBpc051bGxPclVuZGVmKG9iaikgeworICAgICAgICByZXR1cm4gaXNVbmRlZmlu
ZWQob2JqKSB8fCBpc051bGwob2JqKTsKKyAgICB9CisgICAgZnVuY3Rpb24gaXNJbnZhbGlkKG9i
aikgeworICAgICAgICByZXR1cm4gaXNOdWxsKG9iaikgfHwgb2JqID09PSBmYWxzZSB8fCBpc1Ry
dWUob2JqKSB8fCBpc1VuZGVmaW5lZChvYmopOworICAgIH0KKyAgICBmdW5jdGlvbiBpc0Z1bmN0
aW9uKG9iaikgeworICAgICAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ2Z1bmN0aW9uJzsKKyAg
ICB9CisgICAgZnVuY3Rpb24gaXNBdHRyQW5FdmVudChhdHRyKSB7CisgICAgICAgIHJldHVybiBh
dHRyWzBdID09PSAnbycgJiYgYXR0clsxXSA9PT0gJ24nICYmIGF0dHIubGVuZ3RoID4gMzsKKyAg
ICB9CisgICAgZnVuY3Rpb24gaXNTdHJpbmcob2JqKSB7CisgICAgICAgIHJldHVybiB0eXBlb2Yg
b2JqID09PSAnc3RyaW5nJzsKKyAgICB9CisgICAgZnVuY3Rpb24gaXNOdW1iZXIob2JqKSB7Cisg
ICAgICAgIHJldHVybiB0eXBlb2Ygb2JqID09PSAnbnVtYmVyJzsKKyAgICB9CisgICAgZnVuY3Rp
b24gaXNOdWxsKG9iaikgeworICAgICAgICByZXR1cm4gb2JqID09PSBudWxsOworICAgIH0KKyAg
ICBmdW5jdGlvbiBpc1RydWUob2JqKSB7CisgICAgICAgIHJldHVybiBvYmogPT09IHRydWU7Cisg
ICAgfQorICAgIGZ1bmN0aW9uIGlzVW5kZWZpbmVkKG9iaikgeworICAgICAgICByZXR1cm4gb2Jq
ID09PSB1bmRlZmluZWQ7CisgICAgfQorICAgIGZ1bmN0aW9uIGlzT2JqZWN0KG8pIHsKKyAgICAg
ICAgcmV0dXJuIHR5cGVvZiBvID09PSAnb2JqZWN0JzsKKyAgICB9CisgICAgZnVuY3Rpb24gdGhy
b3dFcnJvcihtZXNzYWdlKSB7CisgICAgICAgIGlmICghbWVzc2FnZSkgeworICAgICAgICAgICAg
bWVzc2FnZSA9IEVSUk9SX01TRzsKKyAgICAgICAgfQorICAgICAgICB0aHJvdyBuZXcgRXJyb3Io
KCJJbmZlcm5vIEVycm9yOiAiICsgbWVzc2FnZSkpOworICAgIH0KKyAgICBmdW5jdGlvbiB3YXJu
aW5nKGNvbmRpdGlvbiwgbWVzc2FnZSkgeworICAgICAgICBpZiAoIWNvbmRpdGlvbikgeworICAg
ICAgICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICB2
YXIgRU1QVFlfT0JKID0ge307CisKKyAgICBmdW5jdGlvbiBjbG9uZVZOb2RlKHZOb2RlVG9DbG9u
ZSwgcHJvcHMpIHsKKyAgICAgICAgdmFyIF9jaGlsZHJlbiA9IFtdLCBsZW4gPSBhcmd1bWVudHMu
bGVuZ3RoIC0gMjsKKyAgICAgICAgd2hpbGUgKCBsZW4tLSA+IDAgKSBfY2hpbGRyZW5bIGxlbiBd
ID0gYXJndW1lbnRzWyBsZW4gKyAyIF07CisKKyAgICAgICAgdmFyIGNoaWxkcmVuID0gX2NoaWxk
cmVuOworICAgICAgICBpZiAoX2NoaWxkcmVuLmxlbmd0aCA+IDAgJiYgIWlzTnVsbChfY2hpbGRy
ZW5bMF0pKSB7CisgICAgICAgICAgICBpZiAoIXByb3BzKSB7CisgICAgICAgICAgICAgICAgcHJv
cHMgPSB7fTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChfY2hpbGRyZW4ubGVuZ3Ro
ID09PSAxKSB7CisgICAgICAgICAgICAgICAgY2hpbGRyZW4gPSBfY2hpbGRyZW5bMF07CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBpZiAoaXNVbmRlZmluZWQocHJvcHMuY2hpbGRyZW4pKSB7
CisgICAgICAgICAgICAgICAgcHJvcHMuY2hpbGRyZW4gPSBjaGlsZHJlbjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChpc0FycmF5KGNoaWxk
cmVuKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoaXNBcnJheShwcm9wcy5jaGlsZHJlbikp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzLmNoaWxkcmVuID0gcHJvcHMuY2hpbGRy
ZW4uY29uY2F0KGNoaWxkcmVuKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzLmNoaWxkcmVuID0g
W3Byb3BzLmNoaWxkcmVuXS5jb25jYXQoY2hpbGRyZW4pOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICBpZiAoaXNBcnJheShwcm9wcy5jaGlsZHJlbikpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHByb3BzLmNoaWxkcmVuLnB1c2goY2hpbGRyZW4pOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAg
cHJvcHMuY2hpbGRyZW4gPSBbcHJvcHMuY2hpbGRyZW5dOworICAgICAgICAgICAgICAgICAgICAg
ICAgcHJvcHMuY2hpbGRyZW4ucHVzaChjaGlsZHJlbik7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgY2hp
bGRyZW4gPSBudWxsOworICAgICAgICB2YXIgZmxhZ3MgPSB2Tm9kZVRvQ2xvbmUuZmxhZ3M7Cisg
ICAgICAgIHZhciBldmVudHMgPSB2Tm9kZVRvQ2xvbmUuZXZlbnRzIHx8IChwcm9wcyAmJiBwcm9w
cy5ldmVudHMpIHx8IG51bGw7CisgICAgICAgIHZhciBuZXdWTm9kZTsKKyAgICAgICAgaWYgKGlz
QXJyYXkodk5vZGVUb0Nsb25lKSkgeworICAgICAgICAgICAgbmV3Vk5vZGUgPSB2Tm9kZVRvQ2xv
bmUubWFwKGZ1bmN0aW9uICh2Tm9kZSkgeyByZXR1cm4gY2xvbmVWTm9kZSh2Tm9kZSk7IH0pOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGlzTnVsbE9yVW5kZWYocHJvcHMpICYmIGlzTnVs
bE9yVW5kZWYoY2hpbGRyZW4pKSB7CisgICAgICAgICAgICBuZXdWTm9kZSA9IE9iamVjdC5hc3Np
Z24oe30sIHZOb2RlVG9DbG9uZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICB2YXIga2V5ID0gIWlzTnVsbE9yVW5kZWYodk5vZGVUb0Nsb25lLmtleSkgPyB2Tm9kZVRv
Q2xvbmUua2V5IDogcHJvcHMua2V5OworICAgICAgICAgICAgdmFyIHJlZiA9IHZOb2RlVG9DbG9u
ZS5yZWYgfHwgcHJvcHMucmVmOworICAgICAgICAgICAgaWYgKGZsYWdzICYgMjggLyogQ29tcG9u
ZW50ICovKSB7CisgICAgICAgICAgICAgICAgbmV3Vk5vZGUgPSBjcmVhdGVWTm9kZShmbGFncywg
dk5vZGVUb0Nsb25lLnR5cGUsIE9iamVjdC5hc3NpZ24oe30sIHZOb2RlVG9DbG9uZS5wcm9wcywg
cHJvcHMpLCBudWxsLCBldmVudHMsIGtleSwgcmVmLCB0cnVlKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVsc2UgaWYgKGZsYWdzICYgMzk3MCAvKiBFbGVtZW50ICovKSB7CisgICAgICAg
ICAgICAgICAgY2hpbGRyZW4gPSAocHJvcHMgJiYgcHJvcHMuY2hpbGRyZW4pIHx8IHZOb2RlVG9D
bG9uZS5jaGlsZHJlbjsKKyAgICAgICAgICAgICAgICBuZXdWTm9kZSA9IGNyZWF0ZVZOb2RlKGZs
YWdzLCB2Tm9kZVRvQ2xvbmUudHlwZSwgT2JqZWN0LmFzc2lnbih7fSwgdk5vZGVUb0Nsb25lLnBy
b3BzLCBwcm9wcyksIGNoaWxkcmVuLCBldmVudHMsIGtleSwgcmVmLCAhY2hpbGRyZW4pOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChmbGFncyAmIDI4IC8qIENvbXBvbmVu
dCAqLykgeworICAgICAgICAgICAgdmFyIG5ld1Byb3BzID0gbmV3Vk5vZGUucHJvcHM7CisgICAg
ICAgICAgICBpZiAobmV3UHJvcHMpIHsKKyAgICAgICAgICAgICAgICB2YXIgbmV3Q2hpbGRyZW4g
PSBuZXdQcm9wcy5jaGlsZHJlbjsKKyAgICAgICAgICAgICAgICAvLyB3ZSBuZWVkIHRvIGFsc28g
Y2xvbmUgY29tcG9uZW50IGNoaWxkcmVuIHRoYXQgYXJlIGluIHByb3BzCisgICAgICAgICAgICAg
ICAgLy8gYXMgdGhlIGNoaWxkcmVuIG1heSBhbHNvIGhhdmUgYmVlbiBob2lzdGVkCisgICAgICAg
ICAgICAgICAgaWYgKG5ld0NoaWxkcmVuKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpc0Fy
cmF5KG5ld0NoaWxkcmVuKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBuZXdDaGlsZHJlbi5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhciBjaGlsZCA9IG5ld0NoaWxkcmVuW2ldOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICghaXNJbnZhbGlkKGNoaWxkKSAmJiBpc1ZOb2RlKGNoaWxkKSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdQcm9wcy5jaGlsZHJlbltpXSA9IGNsb25lVk5v
ZGUoY2hpbGQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBl
bHNlIGlmIChpc1ZOb2RlKG5ld0NoaWxkcmVuKSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
bmV3UHJvcHMuY2hpbGRyZW4gPSBjbG9uZVZOb2RlKG5ld0NoaWxkcmVuKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IG5ld1ZOb2RlLmNoaWxkcmVuID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBuZXdWTm9kZS5k
b20gPSBudWxsOworICAgICAgICByZXR1cm4gbmV3Vk5vZGU7CisgICAgfQorCisgICAgZnVuY3Rp
b24gX25vcm1hbGl6ZVZOb2Rlcyhub2RlcywgcmVzdWx0LCBpKSB7CisgICAgICAgIGZvciAoOyBp
IDwgbm9kZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHZhciBuID0gbm9kZXNbaV07Cisg
ICAgICAgICAgICBpZiAoIWlzSW52YWxpZChuKSkgeworICAgICAgICAgICAgICAgIGlmIChBcnJh
eS5pc0FycmF5KG4pKSB7CisgICAgICAgICAgICAgICAgICAgIF9ub3JtYWxpemVWTm9kZXMobiwg
cmVzdWx0LCAwKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChpc1N0cmluZ09yTnVtYmVyKG4pKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBuID0gY3JlYXRlVGV4dFZOb2RlKG4pOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzVk5vZGUobikgJiYgbi5kb20pIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBjbG9uZVZOb2RlKG4pOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKG4pOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBmdW5jdGlvbiBu
b3JtYWxpemVWTm9kZXMobm9kZXMpIHsKKyAgICAgICAgdmFyIG5ld05vZGVzOworICAgICAgICAv
LyB3ZSBhc3NpZ24gJCB3aGljaCBiYXNpY2FsbHkgbWVhbnMgd2UndmUgZmxhZ2dlZCB0aGlzIGFy
cmF5IGZvciBmdXR1cmUgbm90ZQorICAgICAgICAvLyBpZiBpdCBjb21lcyBiYWNrIGFnYWluLCB3
ZSBuZWVkIHRvIGNsb25lIGl0LCBhcyBwZW9wbGUgYXJlIHVzaW5nIGl0CisgICAgICAgIC8vIGlu
IGFuIGltbXV0YWJsZSB3YXkKKyAgICAgICAgLy8gdHNsaW50OmRpc2FibGUKKyAgICAgICAgaWYg
KG5vZGVzWyckJ10pIHsKKyAgICAgICAgICAgIG5vZGVzID0gbm9kZXMuc2xpY2UoKTsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG5vZGVzWyckJ10gPSB0cnVlOworICAg
ICAgICB9CisgICAgICAgIC8vIHRzbGludDplbmFibGUKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdmFyIG4gPSBub2Rlc1tpXTsK
KyAgICAgICAgICAgIGlmIChpc0ludmFsaWQobikpIHsKKyAgICAgICAgICAgICAgICBpZiAoIW5l
d05vZGVzKSB7CisgICAgICAgICAgICAgICAgICAgIG5ld05vZGVzID0gbm9kZXMuc2xpY2UoMCwg
aSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG5ld05vZGVzLnB1c2gobik7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KG4pKSB7
CisgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IChuZXdOb2RlcyB8fCBub2Rlcykuc2xpY2Uo
MCwgaSk7CisgICAgICAgICAgICAgICAgX25vcm1hbGl6ZVZOb2Rlcyhub2RlcywgcmVzdWx0LCBp
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZWxzZSBpZiAoaXNTdHJpbmdPck51bWJlcihuKSkgeworICAgICAgICAgICAgICAgIGlm
ICghbmV3Tm9kZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgbmV3Tm9kZXMgPSBub2Rlcy5zbGlj
ZSgwLCBpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbmV3Tm9kZXMucHVz
aChjcmVhdGVUZXh0Vk5vZGUobikpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBp
ZiAoaXNWTm9kZShuKSAmJiBuLmRvbSkgeworICAgICAgICAgICAgICAgIGlmICghbmV3Tm9kZXMp
IHsKKyAgICAgICAgICAgICAgICAgICAgbmV3Tm9kZXMgPSBub2Rlcy5zbGljZSgwLCBpKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbmV3Tm9kZXMucHVzaChjbG9uZVZOb2Rl
KG4pKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKG5ld05vZGVzKSB7Cisg
ICAgICAgICAgICAgICAgbmV3Tm9kZXMucHVzaChjbG9uZVZOb2RlKG4pKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbmV3Tm9kZXMgfHwgbm9kZXM7CisgICAgfQor
ICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZUNoaWxkcmVuKGNoaWxkcmVuKSB7CisgICAgICAgIGlmIChp
c0FycmF5KGNoaWxkcmVuKSkgeworICAgICAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZVZOb2Rlcyhj
aGlsZHJlbik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaXNWTm9kZShjaGlsZHJlbikg
JiYgY2hpbGRyZW4uZG9tKSB7CisgICAgICAgICAgICByZXR1cm4gY2xvbmVWTm9kZShjaGlsZHJl
bik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGNoaWxkcmVuOworICAgIH0KKyAgICBmdW5j
dGlvbiBub3JtYWxpemVQcm9wcyh2Tm9kZSwgcHJvcHMsIGNoaWxkcmVuKSB7CisgICAgICAgIGlm
ICghKHZOb2RlLmZsYWdzICYgMjggLyogQ29tcG9uZW50ICovKSAmJiBpc051bGxPclVuZGVmKGNo
aWxkcmVuKSAmJiAhaXNOdWxsT3JVbmRlZihwcm9wcy5jaGlsZHJlbikpIHsKKyAgICAgICAgICAg
IHZOb2RlLmNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW47CisgICAgICAgIH0KKyAgICAgICAgaWYg
KHByb3BzLnJlZikgeworICAgICAgICAgICAgdk5vZGUucmVmID0gcHJvcHMucmVmOworICAgICAg
ICB9CisgICAgICAgIGlmIChwcm9wcy5ldmVudHMpIHsKKyAgICAgICAgICAgIHZOb2RlLmV2ZW50
cyA9IHByb3BzLmV2ZW50czsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWlzTnVsbE9yVW5kZWYo
cHJvcHMua2V5KSkgeworICAgICAgICAgICAgdk5vZGUua2V5ID0gcHJvcHMua2V5OworICAgICAg
ICB9CisgICAgfQorICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZSh2Tm9kZSkgeworICAgICAgICB2YXIg
cHJvcHMgPSB2Tm9kZS5wcm9wczsKKyAgICAgICAgdmFyIGNoaWxkcmVuID0gdk5vZGUuY2hpbGRy
ZW47CisgICAgICAgIC8vIGNvbnZlcnQgYSB3cm9uZ2x5IGNyZWF0ZWQgdHlwZSBiYWNrIHRvIGVs
ZW1lbnQKKyAgICAgICAgaWYgKGlzU3RyaW5nKHZOb2RlLnR5cGUpICYmICh2Tm9kZS5mbGFncyAm
IDI4IC8qIENvbXBvbmVudCAqLykpIHsKKyAgICAgICAgICAgIHZOb2RlLmZsYWdzID0gMzk3MCAv
KiBFbGVtZW50ICovOworICAgICAgICB9CisgICAgICAgIGlmIChwcm9wcykgeworICAgICAgICAg
ICAgbm9ybWFsaXplUHJvcHModk5vZGUsIHByb3BzLCBjaGlsZHJlbik7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKCFpc0ludmFsaWQoY2hpbGRyZW4pKSB7CisgICAgICAgICAgICB2Tm9kZS5jaGls
ZHJlbiA9IG5vcm1hbGl6ZUNoaWxkcmVuKGNoaWxkcmVuKTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAocHJvcHMgJiYgIWlzSW52YWxpZChwcm9wcy5jaGlsZHJlbikpIHsKKyAgICAgICAgICAgIHBy
b3BzLmNoaWxkcmVuID0gbm9ybWFsaXplQ2hpbGRyZW4ocHJvcHMuY2hpbGRyZW4pOworICAgICAg
ICB9CisgICAgfQorICAgIGZ1bmN0aW9uIGNyZWF0ZVZOb2RlKGZsYWdzLCB0eXBlLCBwcm9wcywg
Y2hpbGRyZW4sIGV2ZW50cywga2V5LCByZWYsIG5vTm9ybWFsaXNlKSB7CisgICAgICAgIGlmIChm
bGFncyAmIDE2IC8qIENvbXBvbmVudFVua25vd24gKi8pIHsKKyAgICAgICAgICAgIGZsYWdzID0g
aXNTdGF0ZWZ1bENvbXBvbmVudCh0eXBlKSA/IDQgLyogQ29tcG9uZW50Q2xhc3MgKi8gOiA4IC8q
IENvbXBvbmVudEZ1bmN0aW9uICovOworICAgICAgICB9CisgICAgICAgIHZhciB2Tm9kZSA9IHsK
KyAgICAgICAgICAgIGNoaWxkcmVuOiBpc1VuZGVmaW5lZChjaGlsZHJlbikgPyBudWxsIDogY2hp
bGRyZW4sCisgICAgICAgICAgICBkb206IG51bGwsCisgICAgICAgICAgICBldmVudHM6IGV2ZW50
cyB8fCBudWxsLAorICAgICAgICAgICAgZmxhZ3M6IGZsYWdzIHx8IDAsCisgICAgICAgICAgICBr
ZXk6IGtleSA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGtleSwKKyAgICAgICAgICAgIHByb3BzOiBw
cm9wcyB8fCBudWxsLAorICAgICAgICAgICAgcmVmOiByZWYgfHwgbnVsbCwKKyAgICAgICAgICAg
IHR5cGU6IHR5cGUKKyAgICAgICAgfTsKKyAgICAgICAgaWYgKCFub05vcm1hbGlzZSkgeworICAg
ICAgICAgICAgbm9ybWFsaXplKHZOb2RlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdk5v
ZGU7CisgICAgfQorICAgIGZ1bmN0aW9uIGNyZWF0ZVZvaWRWTm9kZSgpIHsKKyAgICAgICAgcmV0
dXJuIGNyZWF0ZVZOb2RlKDQwOTYgLyogVm9pZCAqLyk7CisgICAgfQorICAgIGZ1bmN0aW9uIGNy
ZWF0ZVRleHRWTm9kZSh0ZXh0KSB7CisgICAgICAgIHJldHVybiBjcmVhdGVWTm9kZSgxIC8qIFRl
eHQgKi8sIG51bGwsIG51bGwsIHRleHQpOworICAgIH0KKyAgICBmdW5jdGlvbiBpc1ZOb2RlKG8p
IHsKKyAgICAgICAgcmV0dXJuICEhby5mbGFnczsKKyAgICB9CisKKyAgICB2YXIgZGV2VG9vbHNT
dGF0dXMgPSB7CisgICAgICAgIGNvbm5lY3RlZDogZmFsc2UKKyAgICB9OworICAgIHZhciBpbnRl
cm5hbEluY3JlbWVudGVyID0geworICAgICAgICBpZDogMAorICAgIH07CisgICAgdmFyIGNvbXBv
bmVudElkTWFwID0gbmV3IE1hcCgpOworICAgIGZ1bmN0aW9uIGdldEluY3JlbWVudGFsSWQoKSB7
CisgICAgICAgIHJldHVybiBpbnRlcm5hbEluY3JlbWVudGVyLmlkKys7CisgICAgfQorICAgIGZ1
bmN0aW9uIHNlbmRUb0RldlRvb2xzKGdsb2JhbCwgZGF0YSkgeworICAgICAgICB2YXIgZXZlbnQg
PSBuZXcgQ3VzdG9tRXZlbnQoJ2luZmVybm8uY2xpZW50Lm1lc3NhZ2UnLCB7CisgICAgICAgICAg
ICBkZXRhaWw6IEpTT04uc3RyaW5naWZ5KGRhdGEsIGZ1bmN0aW9uIChrZXksIHZhbCkgeworICAg
ICAgICAgICAgICAgIGlmICghaXNOdWxsKHZhbCkgJiYgIWlzVW5kZWZpbmVkKHZhbCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gJ192Q29tcG9uZW50JyB8fCAhaXNVbmRlZmlu
ZWQodmFsLm5vZGVUeXBlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzRnVuY3Rp
b24odmFsKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgiJCRmOiIgKyAodmFs
Lm5hbWUpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICByZXR1cm4gdmFsOworICAgICAgICAgICAgfSkKKyAgICAgICAgfSk7CisgICAg
ICAgIGdsb2JhbC5kaXNwYXRjaEV2ZW50KGV2ZW50KTsKKyAgICB9CisgICAgZnVuY3Rpb24gcmVy
ZW5kZXJSb290cygpIHsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb290cy5sZW5ndGg7
IGkrKykgeworICAgICAgICAgICAgdmFyIHJvb3QgPSByb290c1tpXTsKKyAgICAgICAgICAgIHJl
bmRlcihyb290LmlucHV0LCByb290LmRvbSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZnVuY3Rp
b24gaW5pdERldlRvb2xzSG9va3MoZ2xvYmFsKSB7CisgICAgICAgIGdsb2JhbC5fX0lORkVSTk9f
REVWVE9PTFNfR0xPQkFMX0hPT0tfXyA9IHJvb3RzOworICAgICAgICBnbG9iYWwuYWRkRXZlbnRM
aXN0ZW5lcignaW5mZXJuby5kZXZ0b29scy5tZXNzYWdlJywgZnVuY3Rpb24gKG1lc3NhZ2UpIHsK
KyAgICAgICAgICAgIHZhciBkZXRhaWwgPSBKU09OLnBhcnNlKG1lc3NhZ2UuZGV0YWlsKTsKKyAg
ICAgICAgICAgIHZhciB0eXBlID0gZGV0YWlsLnR5cGU7CisgICAgICAgICAgICBzd2l0Y2ggKHR5
cGUpIHsKKyAgICAgICAgICAgICAgICBjYXNlICdnZXQtcm9vdHMnOgorICAgICAgICAgICAgICAg
ICAgICBpZiAoIWRldlRvb2xzU3RhdHVzLmNvbm5lY3RlZCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgZGV2VG9vbHNTdGF0dXMuY29ubmVjdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJlcmVuZGVyUm9vdHMoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRSb290
cyhnbG9iYWwpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIC8vIFRP
RE86PworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fSk7CisgICAgfQorICAgIGZ1bmN0aW9uIHNlbmRSb290cyhnbG9iYWwpIHsKKyAgICAgICAgc2Vu
ZFRvRGV2VG9vbHMoZ2xvYmFsLCB7IHR5cGU6ICdyb290cycsIGRhdGE6IHJvb3RzIH0pOworICAg
IH0KKworICAgIHZhciBMaWZlY3ljbGUgPSBmdW5jdGlvbiBMaWZlY3ljbGUoKSB7CisgICAgICAg
IHRoaXMubGlzdGVuZXJzID0gW107CisgICAgICAgIHRoaXMuZmFzdFVubW91bnQgPSB0cnVlOwor
ICAgIH07CisgICAgTGlmZWN5Y2xlLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IGZ1bmN0aW9uIGFk
ZExpc3RlbmVyIChjYWxsYmFjaykgeworICAgICAgICB0aGlzLmxpc3RlbmVycy5wdXNoKGNhbGxi
YWNrKTsKKyAgICB9OworICAgIExpZmVjeWNsZS5wcm90b3R5cGUudHJpZ2dlciA9IGZ1bmN0aW9u
IHRyaWdnZXIgKCkgeworICAgICAgICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7CisKKyAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxpc3RlbmVycy5sZW5ndGg7IGkrKykgeworICAgICAg
ICAgICAgdGhpcyQxLmxpc3RlbmVyc1tpXSgpOworICAgICAgICB9CisgICAgfTsKKworICAgIGZ1
bmN0aW9uIGNvbnN0cnVjdERlZmF1bHRzKHN0cmluZywgb2JqZWN0LCB2YWx1ZSkgeworICAgICAg
ICAvKiBlc2xpbnQgbm8tcmV0dXJuLWFzc2lnbjogMCAqLworICAgICAgICBzdHJpbmcuc3BsaXQo
JywnKS5mb3JFYWNoKGZ1bmN0aW9uIChpKSB7IHJldHVybiBvYmplY3RbaV0gPSB2YWx1ZTsgfSk7
CisgICAgfQorICAgIHZhciB4bGlua05TID0gJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsn
OworICAgIHZhciB4bWxOUyA9ICdodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2Un
OworICAgIHZhciBzdmdOUyA9ICdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zyc7CisgICAgdmFy
IHN0cmljdFByb3BzID0ge307CisgICAgdmFyIGJvb2xlYW5Qcm9wcyA9IHt9OworICAgIHZhciBu
YW1lc3BhY2VzID0ge307CisgICAgdmFyIGlzVW5pdGxlc3NOdW1iZXIgPSB7fTsKKyAgICB2YXIg
c2tpcFByb3BzID0ge307CisgICAgdmFyIGRlaHlwaGVuUHJvcHMgPSB7CisgICAgICAgIHRleHRB
bmNob3I6ICd0ZXh0LWFuY2hvcicKKyAgICB9OworICAgIHZhciBkZWxlZ2F0ZWRQcm9wcyA9IHt9
OworICAgIGNvbnN0cnVjdERlZmF1bHRzKCd4bGluazpocmVmLHhsaW5rOmFyY3JvbGUseGxpbms6
YWN0dWF0ZSx4bGluazpyb2xlLHhsaW5rOnRpdGxlZix4bGluazp0eXBlJywgbmFtZXNwYWNlcywg
eGxpbmtOUyk7CisgICAgY29uc3RydWN0RGVmYXVsdHMoJ3htbDpiYXNlLHhtbDpsYW5nLHhtbDpz
cGFjZScsIG5hbWVzcGFjZXMsIHhtbE5TKTsKKyAgICBjb25zdHJ1Y3REZWZhdWx0cygndm9sdW1l
LGRlZmF1bHRWYWx1ZSxkZWZhdWx0Q2hlY2tlZCcsIHN0cmljdFByb3BzLCB0cnVlKTsKKyAgICBj
b25zdHJ1Y3REZWZhdWx0cygnY2hpbGRyZW4scmVmLGtleSxzZWxlY3RlZCxjaGVja2VkLHZhbHVl
LG11bHRpcGxlJywgc2tpcFByb3BzLCB0cnVlKTsKKyAgICBjb25zdHJ1Y3REZWZhdWx0cygnb25D
bGljayxvbk1vdXNlRG93bixvbk1vdXNlVXAsb25Nb3VzZU1vdmUnLCBkZWxlZ2F0ZWRQcm9wcywg
dHJ1ZSk7CisgICAgY29uc3RydWN0RGVmYXVsdHMoJ211dGVkLHNjb3BlZCxsb29wLG9wZW4sY2hl
Y2tlZCxkZWZhdWx0LGNhcHR1cmUsZGlzYWJsZWQscmVhZG9ubHkscmVxdWlyZWQsYXV0b3BsYXks
Y29udHJvbHMsc2VhbWxlc3MscmV2ZXJzZWQsYWxsb3dmdWxsc2NyZWVuLG5vdmFsaWRhdGUnLCBi
b29sZWFuUHJvcHMsIHRydWUpOworICAgIGNvbnN0cnVjdERlZmF1bHRzKCdhbmltYXRpb25JdGVy
YXRpb25Db3VudCxib3JkZXJJbWFnZU91dHNldCxib3JkZXJJbWFnZVNsaWNlLGJvcmRlckltYWdl
V2lkdGgsYm94RmxleCxib3hGbGV4R3JvdXAsYm94T3JkaW5hbEdyb3VwLGNvbHVtbkNvdW50LGZs
ZXgsZmxleEdyb3csZmxleFBvc2l0aXZlLGZsZXhTaHJpbmssZmxleE5lZ2F0aXZlLGZsZXhPcmRl
cixncmlkUm93LGdyaWRDb2x1bW4sZm9udFdlaWdodCxsaW5lQ2xhbXAsbGluZUhlaWdodCxvcGFj
aXR5LG9yZGVyLG9ycGhhbnMsdGFiU2l6ZSx3aWRvd3MsekluZGV4LHpvb20sZmlsbE9wYWNpdHks
Zmxvb2RPcGFjaXR5LHN0b3BPcGFjaXR5LHN0cm9rZURhc2hhcnJheSxzdHJva2VEYXNob2Zmc2V0
LHN0cm9rZU1pdGVybGltaXQsc3Ryb2tlT3BhY2l0eSxzdHJva2VXaWR0aCwnLCBpc1VuaXRsZXNz
TnVtYmVyLCB0cnVlKTsKKworICAgIHZhciBkZWxlZ2F0ZWRFdmVudHMgPSBuZXcgTWFwKCk7Cisg
ICAgZnVuY3Rpb24gaGFuZGxlRXZlbnQobmFtZSwgbGFzdEV2ZW50LCBuZXh0RXZlbnQsIGRvbSkg
eworICAgICAgICB2YXIgZGVsZWdhdGVkUm9vdHMgPSBkZWxlZ2F0ZWRFdmVudHMuZ2V0KG5hbWUp
OworICAgICAgICBpZiAobmV4dEV2ZW50KSB7CisgICAgICAgICAgICBpZiAoIWRlbGVnYXRlZFJv
b3RzKSB7CisgICAgICAgICAgICAgICAgZGVsZWdhdGVkUm9vdHMgPSB7IGl0ZW1zOiBuZXcgTWFw
KCksIGNvdW50OiAwLCBkb2NFdmVudDogbnVsbCB9OworICAgICAgICAgICAgICAgIHZhciBkb2NF
dmVudCA9IGF0dGFjaEV2ZW50VG9Eb2N1bWVudChuYW1lLCBkZWxlZ2F0ZWRSb290cyk7CisgICAg
ICAgICAgICAgICAgZGVsZWdhdGVkUm9vdHMuZG9jRXZlbnQgPSBkb2NFdmVudDsKKyAgICAgICAg
ICAgICAgICBkZWxlZ2F0ZWRFdmVudHMuc2V0KG5hbWUsIGRlbGVnYXRlZFJvb3RzKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmICghbGFzdEV2ZW50KSB7CisgICAgICAgICAgICAgICAg
ZGVsZWdhdGVkUm9vdHMuY291bnQrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlbGVn
YXRlZFJvb3RzLml0ZW1zLnNldChkb20sIG5leHRFdmVudCk7CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZSBpZiAoZGVsZWdhdGVkUm9vdHMpIHsKKyAgICAgICAgICAgIGlmIChkZWxlZ2F0ZWRSb290
cy5pdGVtcy5oYXMoZG9tKSkgeworICAgICAgICAgICAgICAgIGRlbGVnYXRlZFJvb3RzLmNvdW50
LS07CisgICAgICAgICAgICAgICAgZGVsZWdhdGVkUm9vdHMuaXRlbXMuZGVsZXRlKGRvbSk7Cisg
ICAgICAgICAgICAgICAgaWYgKGRlbGVnYXRlZFJvb3RzLmNvdW50ID09PSAwKSB7CisgICAgICAg
ICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIobm9ybWFsaXplRXZlbnRO
YW1lKG5hbWUpLCBkZWxlZ2F0ZWRSb290cy5kb2NFdmVudCk7CisgICAgICAgICAgICAgICAgICAg
IGRlbGVnYXRlZEV2ZW50cy5kZWxldGUobmFtZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGZ1bmN0aW9uIGRpc3BhdGNoRXZlbnQoZXZl
bnQsIGRvbSwgaXRlbXMsIGNvdW50LCBldmVudERhdGEpIHsKKyAgICAgICAgdmFyIGV2ZW50c1Rv
VHJpZ2dlciA9IGl0ZW1zLmdldChkb20pOworICAgICAgICBpZiAoZXZlbnRzVG9UcmlnZ2VyKSB7
CisgICAgICAgICAgICBjb3VudC0tOworICAgICAgICAgICAgLy8gbGlua0V2ZW50IG9iamVjdAor
ICAgICAgICAgICAgZXZlbnREYXRhLmRvbSA9IGRvbTsKKyAgICAgICAgICAgIGlmIChldmVudHNU
b1RyaWdnZXIuZXZlbnQpIHsKKyAgICAgICAgICAgICAgICBldmVudHNUb1RyaWdnZXIuZXZlbnQo
ZXZlbnRzVG9UcmlnZ2VyLmRhdGEsIGV2ZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgICAgIGV2ZW50c1RvVHJpZ2dlcihldmVudCk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAoZXZlbnREYXRhLnN0b3BQcm9wYWdhdGlvbikgeworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB2
YXIgcGFyZW50RG9tID0gZG9tLnBhcmVudE5vZGU7CisgICAgICAgIGlmIChjb3VudCA+IDAgJiYg
KHBhcmVudERvbSB8fCBwYXJlbnREb20gPT09IGRvY3VtZW50LmJvZHkpKSB7CisgICAgICAgICAg
ICBkaXNwYXRjaEV2ZW50KGV2ZW50LCBwYXJlbnREb20sIGl0ZW1zLCBjb3VudCwgZXZlbnREYXRh
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBmdW5jdGlvbiBub3JtYWxpemVFdmVudE5hbWUobmFt
ZSkgeworICAgICAgICByZXR1cm4gbmFtZS5zdWJzdHIoMikudG9Mb3dlckNhc2UoKTsKKyAgICB9
CisgICAgZnVuY3Rpb24gYXR0YWNoRXZlbnRUb0RvY3VtZW50KG5hbWUsIGRlbGVnYXRlZFJvb3Rz
KSB7CisgICAgICAgIHZhciBkb2NFdmVudCA9IGZ1bmN0aW9uIChldmVudCkgeworICAgICAgICAg
ICAgdmFyIGV2ZW50RGF0YSA9IHsKKyAgICAgICAgICAgICAgICBzdG9wUHJvcGFnYXRpb246IGZh
bHNlLAorICAgICAgICAgICAgICAgIGRvbTogZG9jdW1lbnQKKyAgICAgICAgICAgIH07CisgICAg
ICAgICAgICAvLyB3ZSBoYXZlIHRvIGRvIHRoaXMgYXMgc29tZSBicm93c2VycyByZWN5Y2xlIHRo
ZSBzYW1lIEV2ZW50IGJldHdlZW4gY2FsbHMKKyAgICAgICAgICAgIC8vIHNvIHdlIG5lZWQgdG8g
bWFrZSB0aGUgcHJvcGVydHkgY29uZmlndXJhYmxlCisgICAgICAgICAgICBPYmplY3QuZGVmaW5l
UHJvcGVydHkoZXZlbnQsICdjdXJyZW50VGFyZ2V0JywgeworICAgICAgICAgICAgICAgIGNvbmZp
Z3VyYWJsZTogdHJ1ZSwKKyAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50RGF0YS5kb207CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24gPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgZXZlbnREYXRhLnN0b3BQcm9wYWdhdGlvbiA9
IHRydWU7CisgICAgICAgICAgICB9OworICAgICAgICAgICAgdmFyIGNvdW50ID0gZGVsZWdhdGVk
Um9vdHMuY291bnQ7CisgICAgICAgICAgICBpZiAoY291bnQgPiAwKSB7CisgICAgICAgICAgICAg
ICAgZGlzcGF0Y2hFdmVudChldmVudCwgZXZlbnQudGFyZ2V0LCBkZWxlZ2F0ZWRSb290cy5pdGVt
cywgY291bnQsIGV2ZW50RGF0YSk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgICAg
IGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIobm9ybWFsaXplRXZlbnROYW1lKG5hbWUpLCBkb2NF
dmVudCk7CisgICAgICAgIHJldHVybiBkb2NFdmVudDsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBp
c0NoZWNrZWRUeXBlKHR5cGUpIHsKKyAgICAgICAgcmV0dXJuIHR5cGUgPT09ICdjaGVja2JveCcg
fHwgdHlwZSA9PT0gJ3JhZGlvJzsKKyAgICB9CisgICAgZnVuY3Rpb24gaXNDb250cm9sbGVkKHBy
b3BzKSB7CisgICAgICAgIHZhciB1c2VzQ2hlY2tlZCA9IGlzQ2hlY2tlZFR5cGUocHJvcHMudHlw
ZSk7CisgICAgICAgIHJldHVybiB1c2VzQ2hlY2tlZCA/ICFpc051bGxPclVuZGVmKHByb3BzLmNo
ZWNrZWQpIDogIWlzTnVsbE9yVW5kZWYocHJvcHMudmFsdWUpOworICAgIH0KKyAgICBmdW5jdGlv
biBvblRleHRJbnB1dENoYW5nZShlKSB7CisgICAgICAgIHZhciB2Tm9kZSA9IHRoaXMudk5vZGU7
CisgICAgICAgIHZhciBldmVudHMgPSB2Tm9kZS5ldmVudHMgfHwgRU1QVFlfT0JKOworICAgICAg
ICB2YXIgZG9tID0gdk5vZGUuZG9tOworICAgICAgICBpZiAoZXZlbnRzLm9uSW5wdXQpIHsKKyAg
ICAgICAgICAgIGV2ZW50cy5vbklucHV0KGUpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYg
KGV2ZW50cy5vbmlucHV0KSB7CisgICAgICAgICAgICBldmVudHMub25pbnB1dChlKTsKKyAgICAg
ICAgfQorICAgICAgICAvLyB0aGUgdXNlciBtYXkgaGF2ZSB1cGRhdGVkIHRoZSB2Tm9kZSBmcm9t
IHRoZSBhYm92ZSBvbklucHV0IGV2ZW50cworICAgICAgICAvLyBzbyB3ZSBuZWVkIHRvIGdldCBp
dCBmcm9tIHRoZSBjb250ZXh0IG9mIGB0aGlzYCBhZ2FpbgorICAgICAgICBhcHBseVZhbHVlKHRo
aXMudk5vZGUsIGRvbSk7CisgICAgfQorICAgIGZ1bmN0aW9uIG9uQ2hlY2tib3hDaGFuZ2UoZSkg
eworICAgICAgICB2YXIgdk5vZGUgPSB0aGlzLnZOb2RlOworICAgICAgICB2YXIgZXZlbnRzID0g
dk5vZGUuZXZlbnRzIHx8IEVNUFRZX09CSjsKKyAgICAgICAgdmFyIGRvbSA9IHZOb2RlLmRvbTsK
KyAgICAgICAgaWYgKGV2ZW50cy5vbkNsaWNrKSB7CisgICAgICAgICAgICBldmVudHMub25DbGlj
ayhlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChldmVudHMub25jbGljaykgeworICAg
ICAgICAgICAgZXZlbnRzLm9uY2xpY2soZSk7CisgICAgICAgIH0KKyAgICAgICAgLy8gdGhlIHVz
ZXIgbWF5IGhhdmUgdXBkYXRlZCB0aGUgdk5vZGUgZnJvbSB0aGUgYWJvdmUgb25DbGljayBldmVu
dHMKKyAgICAgICAgLy8gc28gd2UgbmVlZCB0byBnZXQgaXQgZnJvbSB0aGUgY29udGV4dCBvZiBg
dGhpc2AgYWdhaW4KKyAgICAgICAgYXBwbHlWYWx1ZSh0aGlzLnZOb2RlLCBkb20pOworICAgIH0K
KyAgICBmdW5jdGlvbiBoYW5kbGVBc3NvY2lhdGVkUmFkaW9JbnB1dHMobmFtZSkgeworICAgICAg
ICB2YXIgaW5wdXRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgoImlucHV0W3R5cGU9XCJy
YWRpb1wiXVtuYW1lPVwiIiArIG5hbWUgKyAiXCJdIikpOworICAgICAgICBbXS5mb3JFYWNoLmNh
bGwoaW5wdXRzLCBmdW5jdGlvbiAoZG9tKSB7CisgICAgICAgICAgICB2YXIgaW5wdXRXcmFwcGVy
ID0gd3JhcHBlcnMuZ2V0KGRvbSk7CisgICAgICAgICAgICBpZiAoaW5wdXRXcmFwcGVyKSB7Cisg
ICAgICAgICAgICAgICAgdmFyIHByb3BzID0gaW5wdXRXcmFwcGVyLnZOb2RlLnByb3BzOworICAg
ICAgICAgICAgICAgIGlmIChwcm9wcykgeworICAgICAgICAgICAgICAgICAgICBkb20uY2hlY2tl
ZCA9IGlucHV0V3JhcHBlci52Tm9kZS5wcm9wcy5jaGVja2VkOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfQorICAgIGZ1bmN0aW9uIHByb2Nlc3NJ
bnB1dCh2Tm9kZSwgZG9tKSB7CisgICAgICAgIHZhciBwcm9wcyA9IHZOb2RlLnByb3BzIHx8IEVN
UFRZX09CSjsKKyAgICAgICAgYXBwbHlWYWx1ZSh2Tm9kZSwgZG9tKTsKKyAgICAgICAgaWYgKGlz
Q29udHJvbGxlZChwcm9wcykpIHsKKyAgICAgICAgICAgIHZhciBpbnB1dFdyYXBwZXIgPSB3cmFw
cGVycy5nZXQoZG9tKTsKKyAgICAgICAgICAgIGlmICghaW5wdXRXcmFwcGVyKSB7CisgICAgICAg
ICAgICAgICAgaW5wdXRXcmFwcGVyID0geworICAgICAgICAgICAgICAgICAgICB2Tm9kZTogdk5v
ZGUKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIGlmIChpc0NoZWNrZWRUeXBl
KHByb3BzLnR5cGUpKSB7CisgICAgICAgICAgICAgICAgICAgIGRvbS5vbmNsaWNrID0gb25DaGVj
a2JveENoYW5nZS5iaW5kKGlucHV0V3JhcHBlcik7CisgICAgICAgICAgICAgICAgICAgIGRvbS5v
bmNsaWNrLndyYXBwZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZG9tLm9uaW5wdXQgPSBvblRleHRJbnB1dENo
YW5nZS5iaW5kKGlucHV0V3JhcHBlcik7CisgICAgICAgICAgICAgICAgICAgIGRvbS5vbmlucHV0
LndyYXBwZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB3cmFw
cGVycy5zZXQoZG9tLCBpbnB1dFdyYXBwZXIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
aW5wdXRXcmFwcGVyLnZOb2RlID0gdk5vZGU7CisgICAgICAgIH0KKyAgICB9CisgICAgZnVuY3Rp
b24gYXBwbHlWYWx1ZSh2Tm9kZSwgZG9tKSB7CisgICAgICAgIHZhciBwcm9wcyA9IHZOb2RlLnBy
b3BzIHx8IEVNUFRZX09CSjsKKyAgICAgICAgdmFyIHR5cGUgPSBwcm9wcy50eXBlOworICAgICAg
ICB2YXIgdmFsdWUgPSBwcm9wcy52YWx1ZTsKKyAgICAgICAgdmFyIGNoZWNrZWQgPSBwcm9wcy5j
aGVja2VkOworICAgICAgICBpZiAodHlwZSAhPT0gZG9tLnR5cGUgJiYgdHlwZSkgeworICAgICAg
ICAgICAgZG9tLnR5cGUgPSB0eXBlOworICAgICAgICB9CisgICAgICAgIGlmIChwcm9wcy5tdWx0
aXBsZSAhPT0gZG9tLm11bHRpcGxlKSB7CisgICAgICAgICAgICBkb20ubXVsdGlwbGUgPSBwcm9w
cy5tdWx0aXBsZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXNDaGVja2VkVHlwZSh0eXBlKSkg
eworICAgICAgICAgICAgaWYgKCFpc051bGxPclVuZGVmKHZhbHVlKSkgeworICAgICAgICAgICAg
ICAgIGRvbS52YWx1ZSA9IHZhbHVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZG9tLmNo
ZWNrZWQgPSBjaGVja2VkOworICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdyYWRpbycgJiYgcHJv
cHMubmFtZSkgeworICAgICAgICAgICAgICAgIGhhbmRsZUFzc29jaWF0ZWRSYWRpb0lucHV0cyhw
cm9wcy5uYW1lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgIGlmICghaXNOdWxsT3JVbmRlZih2YWx1ZSkgJiYgZG9tLnZhbHVlICE9PSB2YWx1
ZSkgeworICAgICAgICAgICAgICAgIGRvbS52YWx1ZSA9IHZhbHVlOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZWxzZSBpZiAoIWlzTnVsbE9yVW5kZWYoY2hlY2tlZCkpIHsKKyAgICAgICAg
ICAgICAgICBkb20uY2hlY2tlZCA9IGNoZWNrZWQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBmdW5jdGlvbiBpc0NvbnRyb2xsZWQkMShwcm9wcykgeworICAgICAgICBy
ZXR1cm4gIWlzTnVsbE9yVW5kZWYocHJvcHMudmFsdWUpOworICAgIH0KKyAgICBmdW5jdGlvbiB1
cGRhdGVDaGlsZE9wdGlvbih2Tm9kZSwgdmFsdWUpIHsKKyAgICAgICAgdmFyIHByb3BzID0gdk5v
ZGUucHJvcHMgfHwgRU1QVFlfT0JKOworICAgICAgICB2YXIgZG9tID0gdk5vZGUuZG9tOworICAg
ICAgICAvLyB3ZSBkbyB0aGlzIGFzIG11bHRpcGxlIG1heSBoYXZlIGNoYW5nZWQKKyAgICAgICAg
ZG9tLnZhbHVlID0gcHJvcHMudmFsdWU7CisgICAgICAgIGlmICgoaXNBcnJheSh2YWx1ZSkgJiYg
dmFsdWUuaW5kZXhPZihwcm9wcy52YWx1ZSkgIT09IC0xKSB8fCBwcm9wcy52YWx1ZSA9PT0gdmFs
dWUpIHsKKyAgICAgICAgICAgIGRvbS5zZWxlY3RlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICBkb20uc2VsZWN0ZWQgPSBwcm9wcy5zZWxlY3RlZCB8fCBm
YWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBmdW5jdGlvbiBvblNlbGVjdENoYW5nZShlKSB7
CisgICAgICAgIHZhciB2Tm9kZSA9IHRoaXMudk5vZGU7CisgICAgICAgIHZhciBldmVudHMgPSB2
Tm9kZS5ldmVudHMgfHwgRU1QVFlfT0JKOworICAgICAgICB2YXIgZG9tID0gdk5vZGUuZG9tOwor
ICAgICAgICBpZiAoZXZlbnRzLm9uQ2hhbmdlKSB7CisgICAgICAgICAgICBldmVudHMub25DaGFu
Z2UoZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoZXZlbnRzLm9uY2hhbmdlKSB7Cisg
ICAgICAgICAgICBldmVudHMub25jaGFuZ2UoZSk7CisgICAgICAgIH0KKyAgICAgICAgLy8gdGhl
IHVzZXIgbWF5IGhhdmUgdXBkYXRlZCB0aGUgdk5vZGUgZnJvbSB0aGUgYWJvdmUgb25DaGFuZ2Ug
ZXZlbnRzCisgICAgICAgIC8vIHNvIHdlIG5lZWQgdG8gZ2V0IGl0IGZyb20gdGhlIGNvbnRleHQg
b2YgYHRoaXNgIGFnYWluCisgICAgICAgIGFwcGx5VmFsdWUkMSh0aGlzLnZOb2RlLCBkb20pOwor
ICAgIH0KKyAgICBmdW5jdGlvbiBwcm9jZXNzU2VsZWN0KHZOb2RlLCBkb20pIHsKKyAgICAgICAg
dmFyIHByb3BzID0gdk5vZGUucHJvcHMgfHwgRU1QVFlfT0JKOworICAgICAgICBhcHBseVZhbHVl
JDEodk5vZGUsIGRvbSk7CisgICAgICAgIGlmIChpc0NvbnRyb2xsZWQkMShwcm9wcykpIHsKKyAg
ICAgICAgICAgIHZhciBzZWxlY3RXcmFwcGVyID0gd3JhcHBlcnMuZ2V0KGRvbSk7CisgICAgICAg
ICAgICBpZiAoIXNlbGVjdFdyYXBwZXIpIHsKKyAgICAgICAgICAgICAgICBzZWxlY3RXcmFwcGVy
ID0geworICAgICAgICAgICAgICAgICAgICB2Tm9kZTogdk5vZGUKKyAgICAgICAgICAgICAgICB9
OworICAgICAgICAgICAgICAgIGRvbS5vbmNoYW5nZSA9IG9uU2VsZWN0Q2hhbmdlLmJpbmQoc2Vs
ZWN0V3JhcHBlcik7CisgICAgICAgICAgICAgICAgZG9tLm9uY2hhbmdlLndyYXBwZWQgPSB0cnVl
OworICAgICAgICAgICAgICAgIHdyYXBwZXJzLnNldChkb20sIHNlbGVjdFdyYXBwZXIpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgc2VsZWN0V3JhcHBlci52Tm9kZSA9IHZOb2RlOworICAg
ICAgICB9CisgICAgfQorICAgIGZ1bmN0aW9uIGFwcGx5VmFsdWUkMSh2Tm9kZSwgZG9tKSB7Cisg
ICAgICAgIHZhciBwcm9wcyA9IHZOb2RlLnByb3BzIHx8IEVNUFRZX09CSjsKKyAgICAgICAgaWYg
KHByb3BzLm11bHRpcGxlICE9PSBkb20ubXVsdGlwbGUpIHsKKyAgICAgICAgICAgIGRvbS5tdWx0
aXBsZSA9IHByb3BzLm11bHRpcGxlOworICAgICAgICB9CisgICAgICAgIHZhciBjaGlsZHJlbiA9
IHZOb2RlLmNoaWxkcmVuOworICAgICAgICB2YXIgdmFsdWUgPSBwcm9wcy52YWx1ZTsKKyAgICAg
ICAgaWYgKGlzQXJyYXkoY2hpbGRyZW4pKSB7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgdXBkYXRlQ2hpbGRP
cHRpb24oY2hpbGRyZW5baV0sIHZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICBlbHNlIGlmIChpc1ZOb2RlKGNoaWxkcmVuKSkgeworICAgICAgICAgICAgdXBkYXRlQ2hp
bGRPcHRpb24oY2hpbGRyZW4sIHZhbHVlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0
aW9uIGlzQ29udHJvbGxlZCQyKHByb3BzKSB7CisgICAgICAgIHJldHVybiAhaXNOdWxsT3JVbmRl
Zihwcm9wcy52YWx1ZSk7CisgICAgfQorICAgIGZ1bmN0aW9uIG9uVGV4dGFyZWFJbnB1dENoYW5n
ZShlKSB7CisgICAgICAgIHZhciB2Tm9kZSA9IHRoaXMudk5vZGU7CisgICAgICAgIHZhciBldmVu
dHMgPSB2Tm9kZS5ldmVudHMgfHwgRU1QVFlfT0JKOworICAgICAgICB2YXIgZG9tID0gdk5vZGUu
ZG9tOworICAgICAgICBpZiAoZXZlbnRzLm9uSW5wdXQpIHsKKyAgICAgICAgICAgIGV2ZW50cy5v
bklucHV0KGUpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGV2ZW50cy5vbmlucHV0KSB7
CisgICAgICAgICAgICBldmVudHMub25pbnB1dChlKTsKKyAgICAgICAgfQorICAgICAgICAvLyB0
aGUgdXNlciBtYXkgaGF2ZSB1cGRhdGVkIHRoZSB2Tm9kZSBmcm9tIHRoZSBhYm92ZSBvbklucHV0
IGV2ZW50cworICAgICAgICAvLyBzbyB3ZSBuZWVkIHRvIGdldCBpdCBmcm9tIHRoZSBjb250ZXh0
IG9mIGB0aGlzYCBhZ2FpbgorICAgICAgICBhcHBseVZhbHVlJDIodGhpcy52Tm9kZSwgZG9tKTsK
KyAgICB9CisgICAgZnVuY3Rpb24gcHJvY2Vzc1RleHRhcmVhKHZOb2RlLCBkb20pIHsKKyAgICAg
ICAgdmFyIHByb3BzID0gdk5vZGUucHJvcHMgfHwgRU1QVFlfT0JKOworICAgICAgICBhcHBseVZh
bHVlJDIodk5vZGUsIGRvbSk7CisgICAgICAgIHZhciB0ZXh0YXJlYVdyYXBwZXIgPSB3cmFwcGVy
cy5nZXQoZG9tKTsKKyAgICAgICAgaWYgKGlzQ29udHJvbGxlZCQyKHByb3BzKSkgeworICAgICAg
ICAgICAgaWYgKCF0ZXh0YXJlYVdyYXBwZXIpIHsKKyAgICAgICAgICAgICAgICB0ZXh0YXJlYVdy
YXBwZXIgPSB7CisgICAgICAgICAgICAgICAgICAgIHZOb2RlOiB2Tm9kZQorICAgICAgICAgICAg
ICAgIH07CisgICAgICAgICAgICAgICAgZG9tLm9uaW5wdXQgPSBvblRleHRhcmVhSW5wdXRDaGFu
Z2UuYmluZCh0ZXh0YXJlYVdyYXBwZXIpOworICAgICAgICAgICAgICAgIGRvbS5vbmlucHV0Lndy
YXBwZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIHdyYXBwZXJzLnNldChkb20sIHRleHRhcmVh
V3JhcHBlcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0ZXh0YXJlYVdyYXBwZXIudk5v
ZGUgPSB2Tm9kZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBmdW5jdGlvbiBhcHBseVZhbHVlJDIo
dk5vZGUsIGRvbSkgeworICAgICAgICB2YXIgcHJvcHMgPSB2Tm9kZS5wcm9wcyB8fCBFTVBUWV9P
Qko7CisgICAgICAgIHZhciB2YWx1ZSA9IHByb3BzLnZhbHVlOworICAgICAgICBpZiAoZG9tLnZh
bHVlICE9PSB2YWx1ZSkgeworICAgICAgICAgICAgZG9tLnZhbHVlID0gdmFsdWU7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICB2YXIgd3JhcHBlcnMgPSBuZXcgTWFwKCk7CisgICAgZnVuY3Rpb24g
cHJvY2Vzc0VsZW1lbnQoZmxhZ3MsIHZOb2RlLCBkb20pIHsKKyAgICAgICAgaWYgKGZsYWdzICYg
NTEyIC8qIElucHV0RWxlbWVudCAqLykgeworICAgICAgICAgICAgcHJvY2Vzc0lucHV0KHZOb2Rl
LCBkb20pOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGZsYWdzICYgMjA0OCAvKiBTZWxl
Y3RFbGVtZW50ICovKSB7CisgICAgICAgICAgICBwcm9jZXNzU2VsZWN0KHZOb2RlLCBkb20pOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGZsYWdzICYgMTAyNCAvKiBUZXh0YXJlYUVsZW1l
bnQgKi8pIHsKKyAgICAgICAgICAgIHByb2Nlc3NUZXh0YXJlYSh2Tm9kZSwgZG9tKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIHVubW91bnQodk5vZGUsIHBhcmVudERvbSwgbGlm
ZWN5Y2xlLCBjYW5SZWN5Y2xlLCBzaGFsbG93VW5tb3VudCwgaXNSZWN5Y2xpbmcpIHsKKyAgICAg
ICAgdmFyIGZsYWdzID0gdk5vZGUuZmxhZ3M7CisgICAgICAgIGlmIChmbGFncyAmIDI4IC8qIENv
bXBvbmVudCAqLykgeworICAgICAgICAgICAgdW5tb3VudENvbXBvbmVudCh2Tm9kZSwgcGFyZW50
RG9tLCBsaWZlY3ljbGUsIGNhblJlY3ljbGUsIHNoYWxsb3dVbm1vdW50LCBpc1JlY3ljbGluZyk7
CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoZmxhZ3MgJiAzOTcwIC8qIEVsZW1lbnQgKi8p
IHsKKyAgICAgICAgICAgIHVubW91bnRFbGVtZW50KHZOb2RlLCBwYXJlbnREb20sIGxpZmVjeWNs
ZSwgY2FuUmVjeWNsZSwgc2hhbGxvd1VubW91bnQsIGlzUmVjeWNsaW5nKTsKKyAgICAgICAgfQor
ICAgICAgICBlbHNlIGlmIChmbGFncyAmICgxIC8qIFRleHQgKi8gfCA0MDk2IC8qIFZvaWQgKi8p
KSB7CisgICAgICAgICAgICB1bm1vdW50Vm9pZE9yVGV4dCh2Tm9kZSwgcGFyZW50RG9tKTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICBmdW5jdGlvbiB1bm1vdW50Vm9pZE9yVGV4dCh2Tm9kZSwgcGFy
ZW50RG9tKSB7CisgICAgICAgIGlmIChwYXJlbnREb20pIHsKKyAgICAgICAgICAgIHJlbW92ZUNo
aWxkKHBhcmVudERvbSwgdk5vZGUuZG9tKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBmdW5jdGlv
biB1bm1vdW50Q29tcG9uZW50KHZOb2RlLCBwYXJlbnREb20sIGxpZmVjeWNsZSwgY2FuUmVjeWNs
ZSwgc2hhbGxvd1VubW91bnQsIGlzUmVjeWNsaW5nKSB7CisgICAgICAgIHZhciBpbnN0YW5jZSA9
IHZOb2RlLmNoaWxkcmVuOworICAgICAgICB2YXIgZmxhZ3MgPSB2Tm9kZS5mbGFnczsKKyAgICAg
ICAgdmFyIGlzU3RhdGVmdWxDb21wb25lbnQkJDEgPSBmbGFncyAmIDQ7CisgICAgICAgIHZhciBy
ZWYgPSB2Tm9kZS5yZWY7CisgICAgICAgIHZhciBkb20gPSB2Tm9kZS5kb207CisgICAgICAgIGlm
ICghaXNSZWN5Y2xpbmcpIHsKKyAgICAgICAgICAgIGlmICghc2hhbGxvd1VubW91bnQpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoaXNTdGF0ZWZ1bENvbXBvbmVudCQkMSkgeworICAgICAgICAgICAg
ICAgICAgICB2YXIgc3ViTGlmZWN5Y2xlID0gaW5zdGFuY2UuX2xpZmVjeWNsZTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCFzdWJMaWZlY3ljbGUuZmFzdFVubW91bnQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHVubW91bnQoaW5zdGFuY2UuX2xhc3RJbnB1dCwgbnVsbCwgbGlmZWN5Y2xl
LCBmYWxzZSwgc2hhbGxvd1VubW91bnQsIGlzUmVjeWNsaW5nKTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCFsaWZlY3ljbGUuZmFzdFVubW91bnQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHVubW91bnQoaW5zdGFuY2UsIG51bGwsIGxpZmVjeWNsZSwgZmFsc2UsIHNoYWxs
b3dVbm1vdW50LCBpc1JlY3ljbGluZyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaXNTdGF0ZWZ1bENvbXBv
bmVudCQkMSkgeworICAgICAgICAgICAgICAgIGluc3RhbmNlLl9pZ25vcmVTZXRTdGF0ZSA9IHRy
dWU7CisgICAgICAgICAgICAgICAgaW5zdGFuY2UuY29tcG9uZW50V2lsbFVubW91bnQoKTsKKyAg
ICAgICAgICAgICAgICBpZiAocmVmICYmICFpc1JlY3ljbGluZykgeworICAgICAgICAgICAgICAg
ICAgICByZWYobnVsbCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGluc3Rh
bmNlLl91bm1vdW50ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIGZpbmRET01Ob2RlRW5hYmxl
ZCAmJiBjb21wb25lbnRUb0RPTU5vZGVNYXAuZGVsZXRlKGluc3RhbmNlKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGVsc2UgaWYgKCFpc051bGxPclVuZGVmKHJlZikpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoIWlzTnVsbE9yVW5kZWYocmVmLm9uQ29tcG9uZW50V2lsbFVubW91bnQpKSB7
CisgICAgICAgICAgICAgICAgICAgIHJlZi5vbkNvbXBvbmVudFdpbGxVbm1vdW50KGRvbSk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChw
YXJlbnREb20pIHsKKyAgICAgICAgICAgIHZhciBsYXN0SW5wdXQgPSBpbnN0YW5jZS5fbGFzdElu
cHV0OworICAgICAgICAgICAgaWYgKGlzTnVsbE9yVW5kZWYobGFzdElucHV0KSkgeworICAgICAg
ICAgICAgICAgIGxhc3RJbnB1dCA9IGluc3RhbmNlOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgcmVtb3ZlQ2hpbGQocGFyZW50RG9tLCBkb20pOworICAgICAgICB9CisgICAgICAgIGlmIChy
ZWN5Y2xpbmdFbmFibGVkICYmICFpc1N0YXRlZnVsQ29tcG9uZW50JCQxICYmIChwYXJlbnREb20g
fHwgY2FuUmVjeWNsZSkpIHsKKyAgICAgICAgICAgIHBvb2xDb21wb25lbnQodk5vZGUpOworICAg
ICAgICB9CisgICAgfQorICAgIGZ1bmN0aW9uIHVubW91bnRFbGVtZW50KHZOb2RlLCBwYXJlbnRE
b20sIGxpZmVjeWNsZSwgY2FuUmVjeWNsZSwgc2hhbGxvd1VubW91bnQsIGlzUmVjeWNsaW5nKSB7
CisgICAgICAgIHZhciBkb20gPSB2Tm9kZS5kb207CisgICAgICAgIHZhciByZWYgPSB2Tm9kZS5y
ZWY7CisgICAgICAgIHZhciBldmVudHMgPSB2Tm9kZS5ldmVudHM7CisgICAgICAgIGlmICghc2hh
bGxvd1VubW91bnQgJiYgIWxpZmVjeWNsZS5mYXN0VW5tb3VudCkgeworICAgICAgICAgICAgaWYg
KHJlZiAmJiAhaXNSZWN5Y2xpbmcpIHsKKyAgICAgICAgICAgICAgICB1bm1vdW50UmVmKHJlZik7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgY2hpbGRyZW4gPSB2Tm9kZS5jaGlsZHJl
bjsKKyAgICAgICAgICAgIGlmICghaXNOdWxsT3JVbmRlZihjaGlsZHJlbikpIHsKKyAgICAgICAg
ICAgICAgICB1bm1vdW50Q2hpbGRyZW4kMShjaGlsZHJlbiwgbGlmZWN5Y2xlLCBzaGFsbG93VW5t
b3VudCwgaXNSZWN5Y2xpbmcpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlm
ICghaXNOdWxsKGV2ZW50cykpIHsKKyAgICAgICAgICAgIGZvciAodmFyIG5hbWUgaW4gZXZlbnRz
KSB7CisgICAgICAgICAgICAgICAgLy8gZG8gbm90IGFkZCBhIGhhc093blByb3BlcnR5IGNoZWNr
IGhlcmUsIGl0IGFmZmVjdHMgcGVyZm9ybWFuY2UKKyAgICAgICAgICAgICAgICBwYXRjaEV2ZW50
KG5hbWUsIGV2ZW50c1tuYW1lXSwgbnVsbCwgZG9tLCBsaWZlY3ljbGUpOworICAgICAgICAgICAg
ICAgIGV2ZW50c1tuYW1lXSA9IG51bGw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKHBhcmVudERvbSkgeworICAgICAgICAgICAgcmVtb3ZlQ2hpbGQocGFyZW50RG9tLCBk
b20pOworICAgICAgICB9CisgICAgICAgIGlmIChyZWN5Y2xpbmdFbmFibGVkICYmIChwYXJlbnRE
b20gfHwgY2FuUmVjeWNsZSkpIHsKKyAgICAgICAgICAgIHBvb2xFbGVtZW50KHZOb2RlKTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICBmdW5jdGlvbiB1bm1vdW50Q2hpbGRyZW4kMShjaGlsZHJlbiwg
bGlmZWN5Y2xlLCBzaGFsbG93VW5tb3VudCwgaXNSZWN5Y2xpbmcpIHsKKyAgICAgICAgaWYgKGlz
QXJyYXkoY2hpbGRyZW4pKSB7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxk
cmVuLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gY2hpbGRyZW5b
aV07CisgICAgICAgICAgICAgICAgaWYgKCFpc0ludmFsaWQoY2hpbGQpICYmIGlzT2JqZWN0KGNo
aWxkKSkgeworICAgICAgICAgICAgICAgICAgICB1bm1vdW50KGNoaWxkLCBudWxsLCBsaWZlY3lj
bGUsIGZhbHNlLCBzaGFsbG93VW5tb3VudCwgaXNSZWN5Y2xpbmcpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChpc09iamVjdChj
aGlsZHJlbikpIHsKKyAgICAgICAgICAgIHVubW91bnQoY2hpbGRyZW4sIG51bGwsIGxpZmVjeWNs
ZSwgZmFsc2UsIHNoYWxsb3dVbm1vdW50LCBpc1JlY3ljbGluZyk7CisgICAgICAgIH0KKyAgICB9
CisgICAgZnVuY3Rpb24gdW5tb3VudFJlZihyZWYpIHsKKyAgICAgICAgaWYgKGlzRnVuY3Rpb24o
cmVmKSkgeworICAgICAgICAgICAgcmVmKG51bGwpOworICAgICAgICB9CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgaWYgKGlzSW52YWxpZChyZWYpKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGZhbHNlKSB7CisgICAgICAgICAg
ICAgICAgdGhyb3dFcnJvcignc3RyaW5nICJyZWZzIiBhcmUgbm90IHN1cHBvcnRlZCBpbiBJbmZl
cm5vIDEuMC4gVXNlIGNhbGxiYWNrICJyZWZzIiBpbnN0ZWFkLicpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgdGhyb3dFcnJvcigpOworICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rp
b24gcGF0Y2gobGFzdFZOb2RlLCBuZXh0Vk5vZGUsIHBhcmVudERvbSwgbGlmZWN5Y2xlLCBjb250
ZXh0LCBpc1NWRywgaXNSZWN5Y2xpbmcpIHsKKyAgICAgICAgaWYgKGxhc3RWTm9kZSAhPT0gbmV4
dFZOb2RlKSB7CisgICAgICAgICAgICB2YXIgbGFzdEZsYWdzID0gbGFzdFZOb2RlLmZsYWdzOwor
ICAgICAgICAgICAgdmFyIG5leHRGbGFncyA9IG5leHRWTm9kZS5mbGFnczsKKyAgICAgICAgICAg
IGlmIChuZXh0RmxhZ3MgJiAyOCAvKiBDb21wb25lbnQgKi8pIHsKKyAgICAgICAgICAgICAgICBp
ZiAobGFzdEZsYWdzICYgMjggLyogQ29tcG9uZW50ICovKSB7CisgICAgICAgICAgICAgICAgICAg
IHBhdGNoQ29tcG9uZW50KGxhc3RWTm9kZSwgbmV4dFZOb2RlLCBwYXJlbnREb20sIGxpZmVjeWNs
ZSwgY29udGV4dCwgaXNTVkcsIG5leHRGbGFncyAmIDQgLyogQ29tcG9uZW50Q2xhc3MgKi8sIGlz
UmVjeWNsaW5nKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgIHJlcGxhY2VWTm9kZShwYXJlbnREb20sIG1vdW50Q29tcG9uZW50
KG5leHRWTm9kZSwgbnVsbCwgbGlmZWN5Y2xlLCBjb250ZXh0LCBpc1NWRywgbmV4dEZsYWdzICYg
NCAvKiBDb21wb25lbnRDbGFzcyAqLyksIGxhc3RWTm9kZSwgbGlmZWN5Y2xlLCBpc1JlY3ljbGlu
Zyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBp
ZiAobmV4dEZsYWdzICYgMzk3MCAvKiBFbGVtZW50ICovKSB7CisgICAgICAgICAgICAgICAgaWYg
KGxhc3RGbGFncyAmIDM5NzAgLyogRWxlbWVudCAqLykgeworICAgICAgICAgICAgICAgICAgICBw
YXRjaEVsZW1lbnQobGFzdFZOb2RlLCBuZXh0Vk5vZGUsIHBhcmVudERvbSwgbGlmZWN5Y2xlLCBj
b250ZXh0LCBpc1NWRywgaXNSZWN5Y2xpbmcpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVZOb2RlKHBhcmVudERv
bSwgbW91bnRFbGVtZW50KG5leHRWTm9kZSwgbnVsbCwgbGlmZWN5Y2xlLCBjb250ZXh0LCBpc1NW
RyksIGxhc3RWTm9kZSwgbGlmZWN5Y2xlLCBpc1JlY3ljbGluZyk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAobmV4dEZsYWdzICYgMSAvKiBU
ZXh0ICovKSB7CisgICAgICAgICAgICAgICAgaWYgKGxhc3RGbGFncyAmIDEgLyogVGV4dCAqLykg
eworICAgICAgICAgICAgICAgICAgICBwYXRjaFRleHQobGFzdFZOb2RlLCBuZXh0Vk5vZGUpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgcmVwbGFjZVZOb2RlKHBhcmVudERvbSwgbW91bnRUZXh0KG5leHRWTm9kZSwgbnVsbCks
IGxhc3RWTm9kZSwgbGlmZWN5Y2xlLCBpc1JlY3ljbGluZyk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAobmV4dEZsYWdzICYgNDA5NiAvKiBW
b2lkICovKSB7CisgICAgICAgICAgICAgICAgaWYgKGxhc3RGbGFncyAmIDQwOTYgLyogVm9pZCAq
LykgeworICAgICAgICAgICAgICAgICAgICBwYXRjaFZvaWQobGFzdFZOb2RlLCBuZXh0Vk5vZGUp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmVwbGFjZVZOb2RlKHBhcmVudERvbSwgbW91bnRWb2lkKG5leHRWTm9kZSwgbnVs
bCksIGxhc3RWTm9kZSwgbGlmZWN5Y2xlLCBpc1JlY3ljbGluZyk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgLy8g
RXJyb3IgY2FzZTogbW91bnQgbmV3IG9uZSByZXBsYWNpbmcgb2xkIG9uZQorICAgICAgICAgICAg
ICAgIHJlcGxhY2VMYXN0Q2hpbGRBbmRVbm1vdW50KGxhc3RWTm9kZSwgbmV4dFZOb2RlLCBwYXJl
bnREb20sIGxpZmVjeWNsZSwgY29udGV4dCwgaXNTVkcsIGlzUmVjeWNsaW5nKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBmdW5jdGlvbiB1bm1vdW50Q2hpbGRyZW4oY2hp
bGRyZW4sIGRvbSwgbGlmZWN5Y2xlLCBpc1JlY3ljbGluZykgeworICAgICAgICBpZiAoaXNWTm9k
ZShjaGlsZHJlbikpIHsKKyAgICAgICAgICAgIHVubW91bnQoY2hpbGRyZW4sIGRvbSwgbGlmZWN5
Y2xlLCB0cnVlLCBmYWxzZSwgaXNSZWN5Y2xpbmcpOworICAgICAgICB9CisgICAgICAgIGVsc2Ug
aWYgKGlzQXJyYXkoY2hpbGRyZW4pKSB7CisgICAgICAgICAgICByZW1vdmVBbGxDaGlsZHJlbihk
b20sIGNoaWxkcmVuLCBsaWZlY3ljbGUsIGZhbHNlLCBpc1JlY3ljbGluZyk7CisgICAgICAgIH0K
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBkb20udGV4dENvbnRlbnQgPSAnJzsKKyAgICAg
ICAgfQorICAgIH0KKyAgICBmdW5jdGlvbiBwYXRjaEVsZW1lbnQobGFzdFZOb2RlLCBuZXh0Vk5v
ZGUsIHBhcmVudERvbSwgbGlmZWN5Y2xlLCBjb250ZXh0LCBpc1NWRywgaXNSZWN5Y2xpbmcpIHsK
KyAgICAgICAgdmFyIG5leHRUYWcgPSBuZXh0Vk5vZGUudHlwZTsKKyAgICAgICAgdmFyIGxhc3RU
YWcgPSBsYXN0Vk5vZGUudHlwZTsKKyAgICAgICAgaWYgKGxhc3RUYWcgIT09IG5leHRUYWcpIHsK
KyAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3Tm9kZShsYXN0Vk5vZGUsIG5leHRWTm9kZSwgcGFy
ZW50RG9tLCBsaWZlY3ljbGUsIGNvbnRleHQsIGlzU1ZHLCBpc1JlY3ljbGluZyk7CisgICAgICAg
IH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB2YXIgZG9tID0gbGFzdFZOb2RlLmRvbTsK
KyAgICAgICAgICAgIHZhciBsYXN0UHJvcHMgPSBsYXN0Vk5vZGUucHJvcHM7CisgICAgICAgICAg
ICB2YXIgbmV4dFByb3BzID0gbmV4dFZOb2RlLnByb3BzOworICAgICAgICAgICAgdmFyIGxhc3RD
aGlsZHJlbiA9IGxhc3RWTm9kZS5jaGlsZHJlbjsKKyAgICAgICAgICAgIHZhciBuZXh0Q2hpbGRy
ZW4gPSBuZXh0Vk5vZGUuY2hpbGRyZW47CisgICAgICAgICAgICB2YXIgbGFzdEZsYWdzID0gbGFz
dFZOb2RlLmZsYWdzOworICAgICAgICAgICAgdmFyIG5leHRGbGFncyA9IG5leHRWTm9kZS5mbGFn
czsKKyAgICAgICAgICAgIHZhciBsYXN0UmVmID0gbGFzdFZOb2RlLnJlZjsKKyAgICAgICAgICAg
IHZhciBuZXh0UmVmID0gbmV4dFZOb2RlLnJlZjsKKyAgICAgICAgICAgIHZhciBsYXN0RXZlbnRz
ID0gbGFzdFZOb2RlLmV2ZW50czsKKyAgICAgICAgICAgIHZhciBuZXh0RXZlbnRzID0gbmV4dFZO
b2RlLmV2ZW50czsKKyAgICAgICAgICAgIG5leHRWTm9kZS5kb20gPSBkb207CisgICAgICAgICAg
ICBpZiAoaXNTVkcgfHwgKG5leHRGbGFncyAmIDEyOCAvKiBTdmdFbGVtZW50ICovKSkgeworICAg
ICAgICAgICAgICAgIGlzU1ZHID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
IChsYXN0Q2hpbGRyZW4gIT09IG5leHRDaGlsZHJlbikgeworICAgICAgICAgICAgICAgIHBhdGNo
Q2hpbGRyZW4obGFzdEZsYWdzLCBuZXh0RmxhZ3MsIGxhc3RDaGlsZHJlbiwgbmV4dENoaWxkcmVu
LCBkb20sIGxpZmVjeWNsZSwgY29udGV4dCwgaXNTVkcsIGlzUmVjeWNsaW5nKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmICghKG5leHRGbGFncyAmIDIgLyogSHRtbEVsZW1lbnQgKi8p
KSB7CisgICAgICAgICAgICAgICAgcHJvY2Vzc0VsZW1lbnQobmV4dEZsYWdzLCBuZXh0Vk5vZGUs
IGRvbSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobGFzdFByb3BzICE9PSBuZXh0
UHJvcHMpIHsKKyAgICAgICAgICAgICAgICBwYXRjaFByb3BzKGxhc3RQcm9wcywgbmV4dFByb3Bz
LCBkb20sIGxpZmVjeWNsZSwgY29udGV4dCwgaXNTVkcpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKGxhc3RFdmVudHMgIT09IG5leHRFdmVudHMpIHsKKyAgICAgICAgICAgICAgICBw
YXRjaEV2ZW50cyhsYXN0RXZlbnRzLCBuZXh0RXZlbnRzLCBkb20sIGxpZmVjeWNsZSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBpZiAobmV4dFJlZikgeworICAgICAgICAgICAgICAgIGlm
IChsYXN0UmVmICE9PSBuZXh0UmVmIHx8IGlzUmVjeWNsaW5nKSB7CisgICAgICAgICAgICAgICAg
ICAgIG1vdW50UmVmKGRvbSwgbmV4dFJlZiwgbGlmZWN5Y2xlKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZnVuY3Rpb24gcGF0Y2hDaGls
ZHJlbihsYXN0RmxhZ3MsIG5leHRGbGFncywgbGFzdENoaWxkcmVuLCBuZXh0Q2hpbGRyZW4sIGRv
bSwgbGlmZWN5Y2xlLCBjb250ZXh0LCBpc1NWRywgaXNSZWN5Y2xpbmcpIHsKKyAgICAgICAgdmFy
IHBhdGNoQXJyYXkgPSBmYWxzZTsKKyAgICAgICAgdmFyIHBhdGNoS2V5ZWQgPSBmYWxzZTsKKyAg
ICAgICAgaWYgKG5leHRGbGFncyAmIDY0IC8qIEhhc05vbktleWVkQ2hpbGRyZW4gKi8pIHsKKyAg
ICAgICAgICAgIHBhdGNoQXJyYXkgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYg
KChsYXN0RmxhZ3MgJiAzMiAvKiBIYXNLZXllZENoaWxkcmVuICovKSAmJiAobmV4dEZsYWdzICYg
MzIgLyogSGFzS2V5ZWRDaGlsZHJlbiAqLykpIHsKKyAgICAgICAgICAgIHBhdGNoS2V5ZWQgPSB0
cnVlOworICAgICAgICAgICAgcGF0Y2hBcnJheSA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZSBpZiAoaXNJbnZhbGlkKG5leHRDaGlsZHJlbikpIHsKKyAgICAgICAgICAgIHVubW91bnRD
aGlsZHJlbihsYXN0Q2hpbGRyZW4sIGRvbSwgbGlmZWN5Y2xlLCBpc1JlY3ljbGluZyk7CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaXNJbnZhbGlkKGxhc3RDaGlsZHJlbikpIHsKKyAgICAg
ICAgICAgIGlmIChpc1N0cmluZ09yTnVtYmVyKG5leHRDaGlsZHJlbikpIHsKKyAgICAgICAgICAg
ICAgICBzZXRUZXh0Q29udGVudChkb20sIG5leHRDaGlsZHJlbik7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNBcnJheShuZXh0Q2hpbGRy
ZW4pKSB7CisgICAgICAgICAgICAgICAgICAgIG1vdW50QXJyYXlDaGlsZHJlbihuZXh0Q2hpbGRy
ZW4sIGRvbSwgbGlmZWN5Y2xlLCBjb250ZXh0LCBpc1NWRyk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBtb3VudChuZXh0Q2hp
bGRyZW4sIGRvbSwgbGlmZWN5Y2xlLCBjb250ZXh0LCBpc1NWRyk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGlzU3RyaW5nT3JO
dW1iZXIobmV4dENoaWxkcmVuKSkgeworICAgICAgICAgICAgaWYgKGlzU3RyaW5nT3JOdW1iZXIo
bGFzdENoaWxkcmVuKSkgeworICAgICAgICAgICAgICAgIHVwZGF0ZVRleHRDb250ZW50KGRvbSwg
bmV4dENoaWxkcmVuKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgIHVubW91bnRDaGlsZHJlbihsYXN0Q2hpbGRyZW4sIGRvbSwgbGlmZWN5Y2xlLCBp
c1JlY3ljbGluZyk7CisgICAgICAgICAgICAgICAgc2V0VGV4dENvbnRlbnQoZG9tLCBuZXh0Q2hp
bGRyZW4pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGlzQXJy
YXkobmV4dENoaWxkcmVuKSkgeworICAgICAgICAgICAgaWYgKGlzQXJyYXkobGFzdENoaWxkcmVu
KSkgeworICAgICAgICAgICAgICAgIHBhdGNoQXJyYXkgPSB0cnVlOworICAgICAgICAgICAgICAg
IGlmIChpc0tleWVkKGxhc3RDaGlsZHJlbiwgbmV4dENoaWxkcmVuKSkgeworICAgICAgICAgICAg
ICAgICAgICBwYXRjaEtleWVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB1bm1vdW50Q2hpbGRyZW4o
bGFzdENoaWxkcmVuLCBkb20sIGxpZmVjeWNsZSwgaXNSZWN5Y2xpbmcpOworICAgICAgICAgICAg
ICAgIG1vdW50QXJyYXlDaGlsZHJlbihuZXh0Q2hpbGRyZW4sIGRvbSwgbGlmZWN5Y2xlLCBjb250
ZXh0LCBpc1NWRyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAo
aXNBcnJheShsYXN0Q2hpbGRyZW4pKSB7CisgICAgICAgICAgICByZW1vdmVBbGxDaGlsZHJlbihk
b20sIGxhc3RDaGlsZHJlbiwgbGlmZWN5Y2xlLCBmYWxzZSwgaXNSZWN5Y2xpbmcpOworICAgICAg
ICAgICAgbW91bnQobmV4dENoaWxkcmVuLCBkb20sIGxpZmVjeWNsZSwgY29udGV4dCwgaXNTVkcp
OworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGlzVk5vZGUobmV4dENoaWxkcmVuKSkgewor
ICAgICAgICAgICAgaWYgKGlzVk5vZGUobGFzdENoaWxkcmVuKSkgeworICAgICAgICAgICAgICAg
IHBhdGNoKGxhc3RDaGlsZHJlbiwgbmV4dENoaWxkcmVuLCBkb20sIGxpZmVjeWNsZSwgY29udGV4
dCwgaXNTVkcsIGlzUmVjeWNsaW5nKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgIHVubW91bnRDaGlsZHJlbihsYXN0Q2hpbGRyZW4sIGRvbSwgbGlm
ZWN5Y2xlLCBpc1JlY3ljbGluZyk7CisgICAgICAgICAgICAgICAgbW91bnQobmV4dENoaWxkcmVu
LCBkb20sIGxpZmVjeWNsZSwgY29udGV4dCwgaXNTVkcpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIGVsc2UgaWYgKGlzVk5vZGUobGFzdENoaWxkcmVuKSkgeworICAgICAgICB9
CisgICAgICAgIGVsc2UgeworICAgICAgICB9CisgICAgICAgIGlmIChwYXRjaEFycmF5KSB7Cisg
ICAgICAgICAgICBpZiAocGF0Y2hLZXllZCkgeworICAgICAgICAgICAgICAgIHBhdGNoS2V5ZWRD
aGlsZHJlbihsYXN0Q2hpbGRyZW4sIG5leHRDaGlsZHJlbiwgZG9tLCBsaWZlY3ljbGUsIGNvbnRl
eHQsIGlzU1ZHLCBpc1JlY3ljbGluZyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICBwYXRjaE5vbktleWVkQ2hpbGRyZW4obGFzdENoaWxkcmVuLCBu
ZXh0Q2hpbGRyZW4sIGRvbSwgbGlmZWN5Y2xlLCBjb250ZXh0LCBpc1NWRywgaXNSZWN5Y2xpbmcp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGZ1bmN0aW9uIHBhdGNoQ29t
cG9uZW50KGxhc3RWTm9kZSwgbmV4dFZOb2RlLCBwYXJlbnREb20sIGxpZmVjeWNsZSwgY29udGV4
dCwgaXNTVkcsIGlzQ2xhc3MsIGlzUmVjeWNsaW5nKSB7CisgICAgICAgIHZhciBsYXN0VHlwZSA9
IGxhc3RWTm9kZS50eXBlOworICAgICAgICB2YXIgbmV4dFR5cGUgPSBuZXh0Vk5vZGUudHlwZTsK
KyAgICAgICAgdmFyIG5leHRQcm9wcyA9IG5leHRWTm9kZS5wcm9wcyB8fCBFTVBUWV9PQko7Cisg
ICAgICAgIHZhciBsYXN0S2V5ID0gbGFzdFZOb2RlLmtleTsKKyAgICAgICAgdmFyIG5leHRLZXkg
PSBuZXh0Vk5vZGUua2V5OworICAgICAgICBpZiAobGFzdFR5cGUgIT09IG5leHRUeXBlKSB7Cisg
ICAgICAgICAgICBpZiAoaXNDbGFzcykgeworICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3
Tm9kZShsYXN0Vk5vZGUsIG5leHRWTm9kZSwgcGFyZW50RG9tLCBsaWZlY3ljbGUsIGNvbnRleHQs
IGlzU1ZHLCBpc1JlY3ljbGluZyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgICAgICB2YXIgbGFzdElucHV0ID0gbGFzdFZOb2RlLmNoaWxkcmVuLl9sYXN0
SW5wdXQgfHwgbGFzdFZOb2RlLmNoaWxkcmVuOworICAgICAgICAgICAgICAgIHZhciBuZXh0SW5w
dXQgPSBjcmVhdGVTdGF0ZWxlc3NDb21wb25lbnRJbnB1dChuZXh0Vk5vZGUsIG5leHRUeXBlLCBu
ZXh0UHJvcHMsIGNvbnRleHQpOworICAgICAgICAgICAgICAgIHBhdGNoKGxhc3RJbnB1dCwgbmV4
dElucHV0LCBwYXJlbnREb20sIGxpZmVjeWNsZSwgY29udGV4dCwgaXNTVkcsIGlzUmVjeWNsaW5n
KTsKKyAgICAgICAgICAgICAgICB2YXIgZG9tID0gbmV4dFZOb2RlLmRvbSA9IG5leHRJbnB1dC5k
b207CisgICAgICAgICAgICAgICAgbmV4dFZOb2RlLmNoaWxkcmVuID0gbmV4dElucHV0OworICAg
ICAgICAgICAgICAgIG1vdW50U3RhdGVsZXNzQ29tcG9uZW50Q2FsbGJhY2tzKG5leHRWTm9kZS5y
ZWYsIGRvbSwgbGlmZWN5Y2xlKTsKKyAgICAgICAgICAgICAgICB1bm1vdW50KGxhc3RWTm9kZSwg
bnVsbCwgbGlmZWN5Y2xlLCBmYWxzZSwgdHJ1ZSwgaXNSZWN5Y2xpbmcpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKGlzQ2xhc3MpIHsK
KyAgICAgICAgICAgICAgICBpZiAobGFzdEtleSAhPT0gbmV4dEtleSkgeworICAgICAgICAgICAg
ICAgICAgICByZXBsYWNlV2l0aE5ld05vZGUobGFzdFZOb2RlLCBuZXh0Vk5vZGUsIHBhcmVudERv
bSwgbGlmZWN5Y2xlLCBjb250ZXh0LCBpc1NWRywgaXNSZWN5Y2xpbmcpOworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IHZhciBpbnN0YW5jZSA9IGxhc3RWTm9kZS5jaGlsZHJlbjsKKyAgICAgICAgICAgICAgICBpZiAo
aW5zdGFuY2UuX3VubW91bnRlZCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoaXNOdWxsKHBh
cmVudERvbSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VDaGlsZChwYXJlbnRE
b20sIG1vdW50Q29tcG9uZW50KG5leHRWTm9kZSwgbnVsbCwgbGlmZWN5Y2xlLCBjb250ZXh0LCBp
c1NWRywgbmV4dFZOb2RlLmZsYWdzICYgNCAvKiBDb21wb25lbnRDbGFzcyAqLyksIGxhc3RWTm9k
ZS5kb20pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgdmFyIGRlZmF1bHRQcm9wcyA9IG5leHRUeXBlLmRlZmF1bHRQcm9wczsK
KyAgICAgICAgICAgICAgICAgICAgdmFyIGxhc3RQcm9wcyA9IGluc3RhbmNlLnByb3BzOworICAg
ICAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2UuX2RldlRvb2xzU3RhdHVzLmNvbm5lY3RlZCAm
JiAhaW5zdGFuY2UuX2RldlRvb2xzSWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBv
bmVudElkTWFwLnNldChpbnN0YW5jZS5fZGV2VG9vbHNJZCA9IGdldEluY3JlbWVudGFsSWQoKSwg
aW5zdGFuY2UpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGxp
ZmVjeWNsZS5mYXN0VW5tb3VudCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBpZiAoIWlz
VW5kZWZpbmVkKGRlZmF1bHRQcm9wcykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlQ
cm9wc1RvKGxhc3RQcm9wcywgbmV4dFByb3BzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5l
eHRWTm9kZS5wcm9wcyA9IG5leHRQcm9wczsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICB2YXIgbGFzdFN0YXRlID0gaW5zdGFuY2Uuc3RhdGU7CisgICAgICAgICAg
ICAgICAgICAgIHZhciBuZXh0U3RhdGUgPSBpbnN0YW5jZS5zdGF0ZTsKKyAgICAgICAgICAgICAg
ICAgICAgdmFyIGNoaWxkQ29udGV4dCA9IGluc3RhbmNlLmdldENoaWxkQ29udGV4dCgpOworICAg
ICAgICAgICAgICAgICAgICBuZXh0Vk5vZGUuY2hpbGRyZW4gPSBpbnN0YW5jZTsKKyAgICAgICAg
ICAgICAgICAgICAgaW5zdGFuY2UuX2lzU1ZHID0gaXNTVkc7CisgICAgICAgICAgICAgICAgICAg
IGlmICghaXNOdWxsT3JVbmRlZihjaGlsZENvbnRleHQpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBjaGlsZENvbnRleHQgPSBPYmplY3QuYXNzaWduKHt9LCBjb250ZXh0LCBjaGlsZENvbnRl
eHQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRDb250ZXh0ID0gY29udGV4dDsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB2YXIgbGFzdElucHV0JDEgPSBpbnN0
YW5jZS5fbGFzdElucHV0OworICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dElucHV0JDEgPSBp
bnN0YW5jZS5fdXBkYXRlQ29tcG9uZW50KGxhc3RTdGF0ZSwgbmV4dFN0YXRlLCBsYXN0UHJvcHMs
IG5leHRQcm9wcywgY29udGV4dCwgZmFsc2UpOworICAgICAgICAgICAgICAgICAgICB2YXIgZGlk
VXBkYXRlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UuX2NoaWxkQ29udGV4
dCA9IGNoaWxkQ29udGV4dDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzSW52YWxpZChuZXh0
SW5wdXQkMSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5leHRJbnB1dCQxID0gY3JlYXRl
Vm9pZFZOb2RlKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ZWxzZSBpZiAoaXNBcnJheShuZXh0SW5wdXQkMSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChmYWxzZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3IoJ2Eg
dmFsaWQgSW5mZXJubyBWTm9kZSAob3IgbnVsbCkgbXVzdCBiZSByZXR1cm5lZCBmcm9tIGEgY29t
cG9uZW50IHJlbmRlci4gWW91IG1heSBoYXZlIHJldHVybmVkIGFuIGFycmF5IG9yIGFuIGludmFs
aWQgb2JqZWN0LicpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgdGhyb3dFcnJvcigpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKG5leHRJbnB1dCQxID09PSBOT19PUCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgbmV4dElucHV0JDEgPSBsYXN0SW5wdXQkMTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGRpZFVwZGF0ZSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKGlzT2JqZWN0KG5leHRJbnB1dCQxKSAmJiBuZXh0SW5wdXQk
MS5kb20pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5leHRJbnB1dCQxID0gY2xvbmVWTm9k
ZShuZXh0SW5wdXQkMSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgaWYgKG5leHRJbnB1dCQxLmZsYWdzICYgMjggLyogQ29tcG9uZW50ICovKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBuZXh0SW5wdXQkMS5wYXJlbnRWTm9kZSA9IG5leHRWTm9kZTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChsYXN0SW5w
dXQkMS5mbGFncyAmIDI4IC8qIENvbXBvbmVudCAqLykgeworICAgICAgICAgICAgICAgICAgICAg
ICAgbGFzdElucHV0JDEucGFyZW50Vk5vZGUgPSBuZXh0Vk5vZGU7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UuX2xhc3RJbnB1dCA9IG5leHRJbnB1
dCQxOworICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS5fdk5vZGUgPSBuZXh0Vk5vZGU7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChkaWRVcGRhdGUpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciBmYXN0VW5tb3VudCA9IGxpZmVjeWNsZS5mYXN0VW5tb3VudDsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciBzdWJMaWZlY3ljbGUgPSBpbnN0YW5jZS5fbGlmZWN5Y2xlOworICAg
ICAgICAgICAgICAgICAgICAgICAgbGlmZWN5Y2xlLmZhc3RVbm1vdW50ID0gc3ViTGlmZWN5Y2xl
LmZhc3RVbm1vdW50OworICAgICAgICAgICAgICAgICAgICAgICAgcGF0Y2gobGFzdElucHV0JDEs
IG5leHRJbnB1dCQxLCBwYXJlbnREb20sIGxpZmVjeWNsZSwgY2hpbGRDb250ZXh0LCBpc1NWRywg
aXNSZWN5Y2xpbmcpOworICAgICAgICAgICAgICAgICAgICAgICAgc3ViTGlmZWN5Y2xlLmZhc3RV
bm1vdW50ID0gbGlmZWN5Y2xlLnVubW91bnQ7CisgICAgICAgICAgICAgICAgICAgICAgICBsaWZl
Y3ljbGUuZmFzdFVubW91bnQgPSBmYXN0VW5tb3VudDsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGluc3RhbmNlLmNvbXBvbmVudERpZFVwZGF0ZShsYXN0UHJvcHMsIGxhc3RTdGF0ZSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBmaW5kRE9NTm9kZUVuYWJsZWQgJiYgY29tcG9uZW50VG9ET01O
b2RlTWFwLnNldChpbnN0YW5jZSwgbmV4dElucHV0JDEuZG9tKTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICBuZXh0Vk5vZGUuZG9tID0gbmV4dElucHV0JDEuZG9t
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgICAgIHZhciBzaG91bGRVcGRhdGUgPSB0cnVlOworICAgICAgICAgICAgICAg
IHZhciBsYXN0UHJvcHMkMSA9IGxhc3RWTm9kZS5wcm9wczsKKyAgICAgICAgICAgICAgICB2YXIg
bmV4dEhvb2tzID0gbmV4dFZOb2RlLnJlZjsKKyAgICAgICAgICAgICAgICB2YXIgbmV4dEhvb2tz
RGVmaW5lZCA9ICFpc051bGxPclVuZGVmKG5leHRIb29rcyk7CisgICAgICAgICAgICAgICAgdmFy
IGxhc3RJbnB1dCQyID0gbGFzdFZOb2RlLmNoaWxkcmVuOworICAgICAgICAgICAgICAgIHZhciBu
ZXh0SW5wdXQkMiA9IGxhc3RJbnB1dCQyOworICAgICAgICAgICAgICAgIG5leHRWTm9kZS5kb20g
PSBsYXN0Vk5vZGUuZG9tOworICAgICAgICAgICAgICAgIG5leHRWTm9kZS5jaGlsZHJlbiA9IGxh
c3RJbnB1dCQyOworICAgICAgICAgICAgICAgIGlmIChsYXN0S2V5ICE9PSBuZXh0S2V5KSB7Cisg
ICAgICAgICAgICAgICAgICAgIHNob3VsZFVwZGF0ZSA9IHRydWU7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAobmV4dEhv
b2tzRGVmaW5lZCAmJiAhaXNOdWxsT3JVbmRlZihuZXh0SG9va3Mub25Db21wb25lbnRTaG91bGRV
cGRhdGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzaG91bGRVcGRhdGUgPSBuZXh0SG9v
a3Mub25Db21wb25lbnRTaG91bGRVcGRhdGUobGFzdFByb3BzJDEsIG5leHRQcm9wcyk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYg
KHNob3VsZFVwZGF0ZSAhPT0gZmFsc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRI
b29rc0RlZmluZWQgJiYgIWlzTnVsbE9yVW5kZWYobmV4dEhvb2tzLm9uQ29tcG9uZW50V2lsbFVw
ZGF0ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpZmVjeWNsZS5mYXN0VW5tb3VudCA9
IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgbmV4dEhvb2tzLm9uQ29tcG9uZW50V2ls
bFVwZGF0ZShsYXN0UHJvcHMkMSwgbmV4dFByb3BzKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICBuZXh0SW5wdXQkMiA9IG5leHRUeXBlKG5leHRQcm9wcywgY29u
dGV4dCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChpc0ludmFsaWQobmV4dElucHV0JDIpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBuZXh0SW5wdXQkMiA9IGNyZWF0ZVZvaWRWTm9kZSgp
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlz
QXJyYXkobmV4dElucHV0JDIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmFsc2Up
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKCdhIHZhbGlkIEluZmVy
bm8gVk5vZGUgKG9yIG51bGwpIG11c3QgYmUgcmV0dXJuZWQgZnJvbSBhIGNvbXBvbmVudCByZW5k
ZXIuIFlvdSBtYXkgaGF2ZSByZXR1cm5lZCBhbiBhcnJheSBvciBhbiBpbnZhbGlkIG9iamVjdC4n
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHRo
cm93RXJyb3IoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBl
bHNlIGlmIChpc09iamVjdChuZXh0SW5wdXQkMikgJiYgbmV4dElucHV0JDIuZG9tKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBuZXh0SW5wdXQkMiA9IGNsb25lVk5vZGUobmV4dElucHV0JDIp
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0SW5w
dXQkMiAhPT0gTk9fT1ApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhdGNoKGxhc3RJbnB1
dCQyLCBuZXh0SW5wdXQkMiwgcGFyZW50RG9tLCBsaWZlY3ljbGUsIGNvbnRleHQsIGlzU1ZHLCBp
c1JlY3ljbGluZyk7CisgICAgICAgICAgICAgICAgICAgICAgICBuZXh0Vk5vZGUuY2hpbGRyZW4g
PSBuZXh0SW5wdXQkMjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0SG9va3NEZWZp
bmVkICYmICFpc051bGxPclVuZGVmKG5leHRIb29rcy5vbkNvbXBvbmVudERpZFVwZGF0ZSkpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWZlY3ljbGUuZmFzdFVubW91bnQgPSBmYWxz
ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0SG9va3Mub25Db21wb25lbnREaWRV
cGRhdGUobGFzdFByb3BzJDEsIG5leHRQcm9wcyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICBuZXh0Vk5vZGUuZG9tID0gbmV4dElucHV0JDIuZG9t
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGlmIChuZXh0SW5wdXQkMi5mbGFncyAmIDI4IC8qIENvbXBvbmVudCAqLykgeworICAgICAg
ICAgICAgICAgICAgICBuZXh0SW5wdXQkMi5wYXJlbnRWTm9kZSA9IG5leHRWTm9kZTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAobGFzdElucHV0JDIuZmxhZ3Mg
JiAyOCAvKiBDb21wb25lbnQgKi8pIHsKKyAgICAgICAgICAgICAgICAgICAgbGFzdElucHV0JDIu
cGFyZW50Vk5vZGUgPSBuZXh0Vk5vZGU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgZnVuY3Rpb24g
cGF0Y2hUZXh0KGxhc3RWTm9kZSwgbmV4dFZOb2RlKSB7CisgICAgICAgIHZhciBuZXh0VGV4dCA9
IG5leHRWTm9kZS5jaGlsZHJlbjsKKyAgICAgICAgdmFyIGRvbSA9IGxhc3RWTm9kZS5kb207Cisg
ICAgICAgIG5leHRWTm9kZS5kb20gPSBkb207CisgICAgICAgIGlmIChsYXN0Vk5vZGUuY2hpbGRy
ZW4gIT09IG5leHRUZXh0KSB7CisgICAgICAgICAgICBkb20ubm9kZVZhbHVlID0gbmV4dFRleHQ7
CisgICAgICAgIH0KKyAgICB9CisgICAgZnVuY3Rpb24gcGF0Y2hWb2lkKGxhc3RWTm9kZSwgbmV4
dFZOb2RlKSB7CisgICAgICAgIG5leHRWTm9kZS5kb20gPSBsYXN0Vk5vZGUuZG9tOworICAgIH0K
KyAgICBmdW5jdGlvbiBwYXRjaE5vbktleWVkQ2hpbGRyZW4obGFzdENoaWxkcmVuLCBuZXh0Q2hp
bGRyZW4sIGRvbSwgbGlmZWN5Y2xlLCBjb250ZXh0LCBpc1NWRywgaXNSZWN5Y2xpbmcpIHsKKyAg
ICAgICAgdmFyIGxhc3RDaGlsZHJlbkxlbmd0aCA9IGxhc3RDaGlsZHJlbi5sZW5ndGg7CisgICAg
ICAgIHZhciBuZXh0Q2hpbGRyZW5MZW5ndGggPSBuZXh0Q2hpbGRyZW4ubGVuZ3RoOworICAgICAg
ICB2YXIgY29tbW9uTGVuZ3RoID0gbGFzdENoaWxkcmVuTGVuZ3RoID4gbmV4dENoaWxkcmVuTGVu
Z3RoID8gbmV4dENoaWxkcmVuTGVuZ3RoIDogbGFzdENoaWxkcmVuTGVuZ3RoOworICAgICAgICB2
YXIgaTsKKyAgICAgICAgdmFyIG5leHROb2RlID0gbnVsbDsKKyAgICAgICAgdmFyIG5ld05vZGU7
CisgICAgICAgIC8vIExvb3AgYmFja3dhcmRzIHNvIHdlIGNhbiB1c2UgaW5zZXJ0QmVmb3JlCisg
ICAgICAgIGlmIChsYXN0Q2hpbGRyZW5MZW5ndGggPCBuZXh0Q2hpbGRyZW5MZW5ndGgpIHsKKyAg
ICAgICAgICAgIGZvciAoaSA9IG5leHRDaGlsZHJlbkxlbmd0aCAtIDE7IGkgPj0gY29tbW9uTGVu
Z3RoOyBpLS0pIHsKKyAgICAgICAgICAgICAgICB2YXIgY2hpbGQgPSBuZXh0Q2hpbGRyZW5baV07
CisgICAgICAgICAgICAgICAgaWYgKCFpc0ludmFsaWQoY2hpbGQpKSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChjaGlsZC5kb20pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5leHRDaGls
ZHJlbltpXSA9IGNoaWxkID0gY2xvbmVWTm9kZShjaGlsZCk7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgbmV3Tm9kZSA9IG1vdW50KGNoaWxkLCBudWxsLCBsaWZl
Y3ljbGUsIGNvbnRleHQsIGlzU1ZHKTsKKyAgICAgICAgICAgICAgICAgICAgaW5zZXJ0T3JBcHBl
bmQoZG9tLCBuZXdOb2RlLCBuZXh0Tm9kZSk7CisgICAgICAgICAgICAgICAgICAgIG5leHROb2Rl
ID0gbmV3Tm9kZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgZWxzZSBpZiAobmV4dENoaWxkcmVuTGVuZ3RoID09PSAwKSB7CisgICAgICAgICAg
ICByZW1vdmVBbGxDaGlsZHJlbihkb20sIGxhc3RDaGlsZHJlbiwgbGlmZWN5Y2xlLCBmYWxzZSwg
aXNSZWN5Y2xpbmcpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGxhc3RDaGlsZHJlbkxl
bmd0aCA+IG5leHRDaGlsZHJlbkxlbmd0aCkgeworICAgICAgICAgICAgZm9yIChpID0gY29tbW9u
TGVuZ3RoOyBpIDwgbGFzdENoaWxkcmVuTGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICB2
YXIgY2hpbGQkMSA9IGxhc3RDaGlsZHJlbltpXTsKKyAgICAgICAgICAgICAgICBpZiAoIWlzSW52
YWxpZChjaGlsZCQxKSkgeworICAgICAgICAgICAgICAgICAgICB1bm1vdW50KGxhc3RDaGlsZHJl
bltpXSwgZG9tLCBsaWZlY3ljbGUsIGZhbHNlLCBmYWxzZSwgaXNSZWN5Y2xpbmcpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBmb3IgKGkgPSBj
b21tb25MZW5ndGggLSAxOyBpID49IDA7IGktLSkgeworICAgICAgICAgICAgdmFyIGxhc3RDaGls
ZCA9IGxhc3RDaGlsZHJlbltpXTsKKyAgICAgICAgICAgIHZhciBuZXh0Q2hpbGQgPSBuZXh0Q2hp
bGRyZW5baV07CisgICAgICAgICAgICBpZiAoaXNJbnZhbGlkKG5leHRDaGlsZCkpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoIWlzSW52YWxpZChsYXN0Q2hpbGQpKSB7CisgICAgICAgICAgICAgICAg
ICAgIHVubW91bnQobGFzdENoaWxkLCBkb20sIGxpZmVjeWNsZSwgdHJ1ZSwgZmFsc2UsIGlzUmVj
eWNsaW5nKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICBpZiAobmV4dENoaWxkLmRvbSkgeworICAgICAgICAgICAg
ICAgICAgICBuZXh0Q2hpbGRyZW5baV0gPSBuZXh0Q2hpbGQgPSBjbG9uZVZOb2RlKG5leHRDaGls
ZCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChpc0ludmFsaWQobGFz
dENoaWxkKSkgeworICAgICAgICAgICAgICAgICAgICBuZXdOb2RlID0gbW91bnQobmV4dENoaWxk
LCBudWxsLCBsaWZlY3ljbGUsIGNvbnRleHQsIGlzU1ZHKTsKKyAgICAgICAgICAgICAgICAgICAg
aW5zZXJ0T3JBcHBlbmQoZG9tLCBuZXdOb2RlLCBuZXh0Tm9kZSk7CisgICAgICAgICAgICAgICAg
ICAgIG5leHROb2RlID0gbmV3Tm9kZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHBhdGNoKGxhc3RDaGlsZCwgbmV4dENoaWxk
LCBkb20sIGxpZmVjeWNsZSwgY29udGV4dCwgaXNTVkcsIGlzUmVjeWNsaW5nKTsKKyAgICAgICAg
ICAgICAgICAgICAgbmV4dE5vZGUgPSBuZXh0Q2hpbGQuZG9tOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBmdW5jdGlvbiBwYXRjaEtleWVk
Q2hpbGRyZW4oYSwgYiwgZG9tLCBsaWZlY3ljbGUsIGNvbnRleHQsIGlzU1ZHLCBpc1JlY3ljbGlu
ZykgeworICAgICAgICB2YXIgYUxlbmd0aCA9IGEubGVuZ3RoOworICAgICAgICB2YXIgYkxlbmd0
aCA9IGIubGVuZ3RoOworICAgICAgICB2YXIgYUVuZCA9IGFMZW5ndGggLSAxOworICAgICAgICB2
YXIgYkVuZCA9IGJMZW5ndGggLSAxOworICAgICAgICB2YXIgYVN0YXJ0ID0gMDsKKyAgICAgICAg
dmFyIGJTdGFydCA9IDA7CisgICAgICAgIHZhciBpOworICAgICAgICB2YXIgajsKKyAgICAgICAg
dmFyIGFOb2RlOworICAgICAgICB2YXIgYk5vZGU7CisgICAgICAgIHZhciBuZXh0Tm9kZTsKKyAg
ICAgICAgdmFyIG5leHRQb3M7CisgICAgICAgIHZhciBub2RlOworICAgICAgICBpZiAoYUxlbmd0
aCA9PT0gMCkgeworICAgICAgICAgICAgaWYgKGJMZW5ndGggIT09IDApIHsKKyAgICAgICAgICAg
ICAgICBtb3VudEFycmF5Q2hpbGRyZW4oYiwgZG9tLCBsaWZlY3ljbGUsIGNvbnRleHQsIGlzU1ZH
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICBlbHNlIGlmIChiTGVuZ3RoID09PSAwKSB7CisgICAgICAgICAgICByZW1vdmVBbGxDaGlsZHJl
bihkb20sIGEsIGxpZmVjeWNsZSwgZmFsc2UsIGlzUmVjeWNsaW5nKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICB2YXIgYVN0YXJ0Tm9kZSA9IGFbYVN0YXJ0XTsKKyAg
ICAgICAgdmFyIGJTdGFydE5vZGUgPSBiW2JTdGFydF07CisgICAgICAgIHZhciBhRW5kTm9kZSA9
IGFbYUVuZF07CisgICAgICAgIHZhciBiRW5kTm9kZSA9IGJbYkVuZF07CisgICAgICAgIGlmIChi
U3RhcnROb2RlLmRvbSkgeworICAgICAgICAgICAgYltiU3RhcnRdID0gYlN0YXJ0Tm9kZSA9IGNs
b25lVk5vZGUoYlN0YXJ0Tm9kZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJFbmROb2RlLmRv
bSkgeworICAgICAgICAgICAgYltiRW5kXSA9IGJFbmROb2RlID0gY2xvbmVWTm9kZShiRW5kTm9k
ZSk7CisgICAgICAgIH0KKyAgICAgICAgLy8gU3RlcCAxCisgICAgICAgIC8qIGVzbGludCBuby1j
b25zdGFudC1jb25kaXRpb246IDAgKi8KKyAgICAgICAgb3V0ZXI6IHdoaWxlICh0cnVlKSB7Cisg
ICAgICAgICAgICAvLyBTeW5jIG5vZGVzIHdpdGggdGhlIHNhbWUga2V5IGF0IHRoZSBiZWdpbm5p
bmcuCisgICAgICAgICAgICB3aGlsZSAoYVN0YXJ0Tm9kZS5rZXkgPT09IGJTdGFydE5vZGUua2V5
KSB7CisgICAgICAgICAgICAgICAgcGF0Y2goYVN0YXJ0Tm9kZSwgYlN0YXJ0Tm9kZSwgZG9tLCBs
aWZlY3ljbGUsIGNvbnRleHQsIGlzU1ZHLCBpc1JlY3ljbGluZyk7CisgICAgICAgICAgICAgICAg
YVN0YXJ0Kys7CisgICAgICAgICAgICAgICAgYlN0YXJ0Kys7CisgICAgICAgICAgICAgICAgaWYg
KGFTdGFydCA+IGFFbmQgfHwgYlN0YXJ0ID4gYkVuZCkgeworICAgICAgICAgICAgICAgICAgICBi
cmVhayBvdXRlcjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYVN0YXJ0Tm9k
ZSA9IGFbYVN0YXJ0XTsKKyAgICAgICAgICAgICAgICBiU3RhcnROb2RlID0gYltiU3RhcnRdOwor
ICAgICAgICAgICAgICAgIGlmIChiU3RhcnROb2RlLmRvbSkgeworICAgICAgICAgICAgICAgICAg
ICBiW2JTdGFydF0gPSBiU3RhcnROb2RlID0gY2xvbmVWTm9kZShiU3RhcnROb2RlKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBTeW5jIG5vZGVzIHdp
dGggdGhlIHNhbWUga2V5IGF0IHRoZSBlbmQuCisgICAgICAgICAgICB3aGlsZSAoYUVuZE5vZGUu
a2V5ID09PSBiRW5kTm9kZS5rZXkpIHsKKyAgICAgICAgICAgICAgICBwYXRjaChhRW5kTm9kZSwg
YkVuZE5vZGUsIGRvbSwgbGlmZWN5Y2xlLCBjb250ZXh0LCBpc1NWRywgaXNSZWN5Y2xpbmcpOwor
ICAgICAgICAgICAgICAgIGFFbmQtLTsKKyAgICAgICAgICAgICAgICBiRW5kLS07CisgICAgICAg
ICAgICAgICAgaWYgKGFTdGFydCA+IGFFbmQgfHwgYlN0YXJ0ID4gYkVuZCkgeworICAgICAgICAg
ICAgICAgICAgICBicmVhayBvdXRlcjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgYUVuZE5vZGUgPSBhW2FFbmRdOworICAgICAgICAgICAgICAgIGJFbmROb2RlID0gYltiRW5k
XTsKKyAgICAgICAgICAgICAgICBpZiAoYkVuZE5vZGUuZG9tKSB7CisgICAgICAgICAgICAgICAg
ICAgIGJbYkVuZF0gPSBiRW5kTm9kZSA9IGNsb25lVk5vZGUoYkVuZE5vZGUpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIE1vdmUgYW5kIHN5bmMgbm9k
ZXMgZnJvbSByaWdodCB0byBsZWZ0LgorICAgICAgICAgICAgaWYgKGFFbmROb2RlLmtleSA9PT0g
YlN0YXJ0Tm9kZS5rZXkpIHsKKyAgICAgICAgICAgICAgICBwYXRjaChhRW5kTm9kZSwgYlN0YXJ0
Tm9kZSwgZG9tLCBsaWZlY3ljbGUsIGNvbnRleHQsIGlzU1ZHLCBpc1JlY3ljbGluZyk7CisgICAg
ICAgICAgICAgICAgaW5zZXJ0T3JBcHBlbmQoZG9tLCBiU3RhcnROb2RlLmRvbSwgYVN0YXJ0Tm9k
ZS5kb20pOworICAgICAgICAgICAgICAgIGFFbmQtLTsKKyAgICAgICAgICAgICAgICBiU3RhcnQr
KzsKKyAgICAgICAgICAgICAgICBhRW5kTm9kZSA9IGFbYUVuZF07CisgICAgICAgICAgICAgICAg
YlN0YXJ0Tm9kZSA9IGJbYlN0YXJ0XTsKKyAgICAgICAgICAgICAgICBpZiAoYlN0YXJ0Tm9kZS5k
b20pIHsKKyAgICAgICAgICAgICAgICAgICAgYltiU3RhcnRdID0gYlN0YXJ0Tm9kZSA9IGNsb25l
Vk5vZGUoYlN0YXJ0Tm9kZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gTW92ZSBhbmQgc3luYyBub2Rl
cyBmcm9tIGxlZnQgdG8gcmlnaHQuCisgICAgICAgICAgICBpZiAoYVN0YXJ0Tm9kZS5rZXkgPT09
IGJFbmROb2RlLmtleSkgeworICAgICAgICAgICAgICAgIHBhdGNoKGFTdGFydE5vZGUsIGJFbmRO
b2RlLCBkb20sIGxpZmVjeWNsZSwgY29udGV4dCwgaXNTVkcsIGlzUmVjeWNsaW5nKTsKKyAgICAg
ICAgICAgICAgICBuZXh0UG9zID0gYkVuZCArIDE7CisgICAgICAgICAgICAgICAgbmV4dE5vZGUg
PSBuZXh0UG9zIDwgYi5sZW5ndGggPyBiW25leHRQb3NdLmRvbSA6IG51bGw7CisgICAgICAgICAg
ICAgICAgaW5zZXJ0T3JBcHBlbmQoZG9tLCBiRW5kTm9kZS5kb20sIG5leHROb2RlKTsKKyAgICAg
ICAgICAgICAgICBhU3RhcnQrKzsKKyAgICAgICAgICAgICAgICBiRW5kLS07CisgICAgICAgICAg
ICAgICAgYVN0YXJ0Tm9kZSA9IGFbYVN0YXJ0XTsKKyAgICAgICAgICAgICAgICBiRW5kTm9kZSA9
IGJbYkVuZF07CisgICAgICAgICAgICAgICAgaWYgKGJFbmROb2RlLmRvbSkgeworICAgICAgICAg
ICAgICAgICAgICBiW2JFbmRdID0gYkVuZE5vZGUgPSBjbG9uZVZOb2RlKGJFbmROb2RlKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoYVN0YXJ0ID4gYUVu
ZCkgeworICAgICAgICAgICAgaWYgKGJTdGFydCA8PSBiRW5kKSB7CisgICAgICAgICAgICAgICAg
bmV4dFBvcyA9IGJFbmQgKyAxOworICAgICAgICAgICAgICAgIG5leHROb2RlID0gbmV4dFBvcyA8
IGIubGVuZ3RoID8gYltuZXh0UG9zXS5kb20gOiBudWxsOworICAgICAgICAgICAgICAgIHdoaWxl
IChiU3RhcnQgPD0gYkVuZCkgeworICAgICAgICAgICAgICAgICAgICBub2RlID0gYltiU3RhcnRd
OworICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5kb20pIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJbYlN0YXJ0XSA9IG5vZGUgPSBjbG9uZVZOb2RlKG5vZGUpOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJTdGFydCsrOworICAgICAgICAgICAgICAg
ICAgICBpbnNlcnRPckFwcGVuZChkb20sIG1vdW50KG5vZGUsIG51bGwsIGxpZmVjeWNsZSwgY29u
dGV4dCwgaXNTVkcpLCBuZXh0Tm9kZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGJTdGFydCA+IGJFbmQpIHsKKyAgICAgICAg
ICAgIHdoaWxlIChhU3RhcnQgPD0gYUVuZCkgeworICAgICAgICAgICAgICAgIHVubW91bnQoYVth
U3RhcnQrK10sIGRvbSwgbGlmZWN5Y2xlLCBmYWxzZSwgZmFsc2UsIGlzUmVjeWNsaW5nKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGFMZW5n
dGggPSBhRW5kIC0gYVN0YXJ0ICsgMTsKKyAgICAgICAgICAgIGJMZW5ndGggPSBiRW5kIC0gYlN0
YXJ0ICsgMTsKKyAgICAgICAgICAgIHZhciBhTnVsbGFibGUgPSBhOworICAgICAgICAgICAgdmFy
IHNvdXJjZXMgPSBuZXcgQXJyYXkoYkxlbmd0aCk7CisgICAgICAgICAgICAvLyBNYXJrIGFsbCBu
b2RlcyBhcyBpbnNlcnRlZC4KKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBiTGVuZ3RoOyBp
KyspIHsKKyAgICAgICAgICAgICAgICBzb3VyY2VzW2ldID0gLTE7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB2YXIgbW92ZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIHZhciBwb3MgPSAwOwor
ICAgICAgICAgICAgdmFyIHBhdGNoZWQgPSAwOworICAgICAgICAgICAgaWYgKChiTGVuZ3RoIDw9
IDQpIHx8IChhTGVuZ3RoICogYkxlbmd0aCA8PSAxNikpIHsKKyAgICAgICAgICAgICAgICBmb3Ig
KGkgPSBhU3RhcnQ7IGkgPD0gYUVuZDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGFOb2Rl
ID0gYVtpXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBhdGNoZWQgPCBiTGVuZ3RoKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSBiU3RhcnQ7IGogPD0gYkVuZDsgaisrKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYk5vZGUgPSBiW2pdOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChhTm9kZS5rZXkgPT09IGJOb2RlLmtleSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VzW2ogLSBiU3RhcnRdID0gaTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBvcyA+IGopIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1vdmVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcyA9IGo7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJO
b2RlLmRvbSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYltqXSA9IGJO
b2RlID0gY2xvbmVWTm9kZShiTm9kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0Y2goYU5vZGUsIGJOb2RlLCBk
b20sIGxpZmVjeWNsZSwgY29udGV4dCwgaXNTVkcsIGlzUmVjeWNsaW5nKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcGF0Y2hlZCsrOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhTnVsbGFibGVbaV0gPSBudWxsOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YXIga2V5
SW5kZXggPSBuZXcgTWFwKCk7CisgICAgICAgICAgICAgICAgZm9yIChpID0gYlN0YXJ0OyBpIDw9
IGJFbmQ7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBub2RlID0gYltpXTsKKyAgICAgICAg
ICAgICAgICAgICAga2V5SW5kZXguc2V0KG5vZGUua2V5LCBpKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgZm9yIChpID0gYVN0YXJ0OyBpIDw9IGFFbmQ7IGkrKykgeworICAg
ICAgICAgICAgICAgICAgICBhTm9kZSA9IGFbaV07CisgICAgICAgICAgICAgICAgICAgIGlmIChw
YXRjaGVkIDwgYkxlbmd0aCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaiA9IGtleUluZGV4
LmdldChhTm9kZS5rZXkpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1VuZGVmaW5l
ZChqKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJOb2RlID0gYltqXTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VzW2ogLSBiU3RhcnRdID0gaTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAocG9zID4gaikgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtb3ZlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwb3MgPSBqOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoYk5vZGUuZG9tKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJbal0gPSBiTm9kZSA9IGNsb25lVk5vZGUoYk5vZGUpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRj
aChhTm9kZSwgYk5vZGUsIGRvbSwgbGlmZWN5Y2xlLCBjb250ZXh0LCBpc1NWRywgaXNSZWN5Y2xp
bmcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGNoZWQrKzsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhTnVsbGFibGVbaV0gPSBudWxsOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWYgKGFMZW5ndGggPT09IGEubGVuZ3RoICYmIHBhdGNoZWQg
PT09IDApIHsKKyAgICAgICAgICAgICAgICByZW1vdmVBbGxDaGlsZHJlbihkb20sIGEsIGxpZmVj
eWNsZSwgZmFsc2UsIGlzUmVjeWNsaW5nKTsKKyAgICAgICAgICAgICAgICB3aGlsZSAoYlN0YXJ0
IDwgYkxlbmd0aCkgeworICAgICAgICAgICAgICAgICAgICBub2RlID0gYltiU3RhcnRdOworICAg
ICAgICAgICAgICAgICAgICBpZiAobm9kZS5kb20pIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGJbYlN0YXJ0XSA9IG5vZGUgPSBjbG9uZVZOb2RlKG5vZGUpOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIGJTdGFydCsrOworICAgICAgICAgICAgICAgICAgICBp
bnNlcnRPckFwcGVuZChkb20sIG1vdW50KG5vZGUsIG51bGwsIGxpZmVjeWNsZSwgY29udGV4dCwg
aXNTVkcpLCBudWxsKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBpID0gYUxlbmd0aCAtIHBhdGNoZWQ7CisgICAg
ICAgICAgICAgICAgd2hpbGUgKGkgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgIGFOb2RlID0g
YU51bGxhYmxlW2FTdGFydCsrXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpc051bGwoYU5v
ZGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1bm1vdW50KGFOb2RlLCBkb20sIGxpZmVj
eWNsZSwgZmFsc2UsIGZhbHNlLCBpc1JlY3ljbGluZyk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpLS07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgaWYgKG1vdmVkKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBzZXEgPSBsaXNf
YWxnb3JpdGhtKHNvdXJjZXMpOworICAgICAgICAgICAgICAgICAgICBqID0gc2VxLmxlbmd0aCAt
IDE7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IGJMZW5ndGggLSAxOyBpID49IDA7IGkt
LSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZXNbaV0gPT09IC0xKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zID0gaSArIGJTdGFydDsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBub2RlID0gYltwb3NdOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChub2RlLmRvbSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiW3Bv
c10gPSBub2RlID0gY2xvbmVWTm9kZShub2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dFBvcyA9IHBvcyArIDE7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbmV4dE5vZGUgPSBuZXh0UG9zIDwgYi5sZW5ndGggPyBi
W25leHRQb3NdLmRvbSA6IG51bGw7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0
T3JBcHBlbmQoZG9tLCBtb3VudChub2RlLCBkb20sIGxpZmVjeWNsZSwgY29udGV4dCwgaXNTVkcp
LCBuZXh0Tm9kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaiA8IDAgfHwg
aSAhPT0gc2VxW2pdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcyA9IGkg
KyBiU3RhcnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBiW3Bvc107
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRQb3MgPSBwb3MgKyAxOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0Tm9kZSA9IG5leHRQb3MgPCBiLmxlbmd0
aCA/IGJbbmV4dFBvc10uZG9tIDogbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW5zZXJ0T3JBcHBlbmQoZG9tLCBub2RlLmRvbSwgbmV4dE5vZGUpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgai0tOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChwYXRjaGVkICE9
PSBiTGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IGJMZW5ndGggLSAxOyBp
ID49IDA7IGktLSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZXNbaV0gPT09
IC0xKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zID0gaSArIGJTdGFydDsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlID0gYltwb3NdOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChub2RlLmRvbSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBiW3Bvc10gPSBub2RlID0gY2xvbmVWTm9kZShub2RlKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dFBvcyA9IHBvcyAr
IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dE5vZGUgPSBuZXh0UG9zIDwgYi5s
ZW5ndGggPyBiW25leHRQb3NdLmRvbSA6IG51bGw7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW5zZXJ0T3JBcHBlbmQoZG9tLCBtb3VudChub2RlLCBudWxsLCBsaWZlY3ljbGUsIGNvbnRl
eHQsIGlzU1ZHKSwgbmV4dE5vZGUpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorICAgIC8vIC8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0xvbmdl
c3RfaW5jcmVhc2luZ19zdWJzZXF1ZW5jZQorICAgIGZ1bmN0aW9uIGxpc19hbGdvcml0aG0oYSkg
eworICAgICAgICB2YXIgcCA9IGEuc2xpY2UoMCk7CisgICAgICAgIHZhciByZXN1bHQgPSBbXTsK
KyAgICAgICAgcmVzdWx0LnB1c2goMCk7CisgICAgICAgIHZhciBpOworICAgICAgICB2YXIgajsK
KyAgICAgICAgdmFyIHU7CisgICAgICAgIHZhciB2OworICAgICAgICB2YXIgYzsKKyAgICAgICAg
Zm9yIChpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChhW2ldID09
PSAtMSkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaiA9IHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV07CisgICAgICAgICAgICBpZiAoYVtq
XSA8IGFbaV0pIHsKKyAgICAgICAgICAgICAgICBwW2ldID0gajsKKyAgICAgICAgICAgICAgICBy
ZXN1bHQucHVzaChpKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHUgPSAwOworICAgICAgICAgICAgdiA9IHJlc3VsdC5sZW5ndGggLSAxOwor
ICAgICAgICAgICAgd2hpbGUgKHUgPCB2KSB7CisgICAgICAgICAgICAgICAgYyA9ICgodSArIHYp
IC8gMikgfCAwOworICAgICAgICAgICAgICAgIGlmIChhW3Jlc3VsdFtjXV0gPCBhW2ldKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHUgPSBjICsgMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHYgPSBjOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChhW2ldIDwgYVtyZXN1bHRbdV1d
KSB7CisgICAgICAgICAgICAgICAgaWYgKHUgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgIHBb
aV0gPSByZXN1bHRbdSAtIDFdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBy
ZXN1bHRbdV0gPSBpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHUgPSByZXN1
bHQubGVuZ3RoOworICAgICAgICB2ID0gcmVzdWx0W3UgLSAxXTsKKyAgICAgICAgd2hpbGUgKHUt
LSA+IDApIHsKKyAgICAgICAgICAgIHJlc3VsdFt1XSA9IHY7CisgICAgICAgICAgICB2ID0gcFt2
XTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICBmdW5jdGlv
biBwYXRjaFByb3AocHJvcCwgbGFzdFZhbHVlLCBuZXh0VmFsdWUsIGRvbSwgaXNTVkcsIGxpZmVj
eWNsZSkgeworICAgICAgICBpZiAoc2tpcFByb3BzW3Byb3BdKSB7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJvb2xlYW5Qcm9wc1twcm9wXSkgeworICAgICAg
ICAgICAgZG9tW3Byb3BdID0gbmV4dFZhbHVlID8gdHJ1ZSA6IGZhbHNlOworICAgICAgICB9Cisg
ICAgICAgIGVsc2UgaWYgKHN0cmljdFByb3BzW3Byb3BdKSB7CisgICAgICAgICAgICB2YXIgdmFs
dWUgPSBpc051bGxPclVuZGVmKG5leHRWYWx1ZSkgPyAnJyA6IG5leHRWYWx1ZTsKKyAgICAgICAg
ICAgIGlmIChkb21bcHJvcF0gIT09IHZhbHVlKSB7CisgICAgICAgICAgICAgICAgZG9tW3Byb3Bd
ID0gdmFsdWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaXNB
dHRyQW5FdmVudChwcm9wKSkgeworICAgICAgICAgICAgcGF0Y2hFdmVudChwcm9wLCBsYXN0VmFs
dWUsIG5leHRWYWx1ZSwgZG9tLCBsaWZlY3ljbGUpOworICAgICAgICB9CisgICAgICAgIGVsc2Ug
aWYgKGxhc3RWYWx1ZSAhPT0gbmV4dFZhbHVlKSB7CisgICAgICAgICAgICBpZiAoaXNOdWxsT3JV
bmRlZihuZXh0VmFsdWUpKSB7CisgICAgICAgICAgICAgICAgZG9tLnJlbW92ZUF0dHJpYnV0ZShw
cm9wKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHByb3AgPT09ICdjbGFz
c05hbWUnKSB7CisgICAgICAgICAgICAgICAgaWYgKGlzU1ZHKSB7CisgICAgICAgICAgICAgICAg
ICAgIGRvbS5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgbmV4dFZhbHVlKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGRvbS5jbGFz
c05hbWUgPSBuZXh0VmFsdWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZWxzZSBpZiAocHJvcCA9PT0gJ3N0eWxlJykgeworICAgICAgICAgICAgICAgIHBh
dGNoU3R5bGUobGFzdFZhbHVlLCBuZXh0VmFsdWUsIGRvbSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBlbHNlIGlmIChwcm9wID09PSAnZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwnKSB7Cisg
ICAgICAgICAgICAgICAgdmFyIGxhc3RIdG1sID0gbGFzdFZhbHVlICYmIGxhc3RWYWx1ZS5fX2h0
bWw7CisgICAgICAgICAgICAgICAgdmFyIG5leHRIdG1sID0gbmV4dFZhbHVlICYmIG5leHRWYWx1
ZS5fX2h0bWw7CisgICAgICAgICAgICAgICAgaWYgKGxhc3RIdG1sICE9PSBuZXh0SHRtbCkgewor
ICAgICAgICAgICAgICAgICAgICBpZiAoIWlzTnVsbE9yVW5kZWYobmV4dEh0bWwpKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBkb20uaW5uZXJIVE1MID0gbmV4dEh0bWw7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBlbHNlIGlmIChwcm9wICE9PSAnY2hpbGRyZW5UeXBlJyAmJiBwcm9wICE9PSAncmVmJyAmJiBw
cm9wICE9PSAna2V5JykgeworICAgICAgICAgICAgICAgIHZhciBkZWh5cGhlblByb3AgPSBkZWh5
cGhlblByb3BzW3Byb3BdOworICAgICAgICAgICAgICAgIHZhciBucyA9IG5hbWVzcGFjZXNbcHJv
cF07CisgICAgICAgICAgICAgICAgaWYgKG5zKSB7CisgICAgICAgICAgICAgICAgICAgIGRvbS5z
ZXRBdHRyaWJ1dGVOUyhucywgZGVoeXBoZW5Qcm9wIHx8IHByb3AsIG5leHRWYWx1ZSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICBkb20uc2V0QXR0cmlidXRlKGRlaHlwaGVuUHJvcCB8fCBwcm9wLCBuZXh0VmFsdWUpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBmdW5j
dGlvbiBwYXRjaEV2ZW50cyhsYXN0RXZlbnRzLCBuZXh0RXZlbnRzLCBkb20sIGxpZmVjeWNsZSkg
eworICAgICAgICBsYXN0RXZlbnRzID0gbGFzdEV2ZW50cyB8fCBFTVBUWV9PQko7CisgICAgICAg
IG5leHRFdmVudHMgPSBuZXh0RXZlbnRzIHx8IEVNUFRZX09CSjsKKyAgICAgICAgaWYgKG5leHRF
dmVudHMgIT09IEVNUFRZX09CSikgeworICAgICAgICAgICAgZm9yICh2YXIgbmFtZSBpbiBuZXh0
RXZlbnRzKSB7CisgICAgICAgICAgICAgICAgLy8gZG8gbm90IGFkZCBhIGhhc093blByb3BlcnR5
IGNoZWNrIGhlcmUsIGl0IGFmZmVjdHMgcGVyZm9ybWFuY2UKKyAgICAgICAgICAgICAgICBwYXRj
aEV2ZW50KG5hbWUsIGxhc3RFdmVudHNbbmFtZV0sIG5leHRFdmVudHNbbmFtZV0sIGRvbSwgbGlm
ZWN5Y2xlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAobGFzdEV2ZW50
cyAhPT0gRU1QVFlfT0JKKSB7CisgICAgICAgICAgICBmb3IgKHZhciBuYW1lJDEgaW4gbGFzdEV2
ZW50cykgeworICAgICAgICAgICAgICAgIC8vIGRvIG5vdCBhZGQgYSBoYXNPd25Qcm9wZXJ0eSBj
aGVjayBoZXJlLCBpdCBhZmZlY3RzIHBlcmZvcm1hbmNlCisgICAgICAgICAgICAgICAgaWYgKGlz
TnVsbE9yVW5kZWYobmV4dEV2ZW50c1tuYW1lJDFdKSkgeworICAgICAgICAgICAgICAgICAgICBw
YXRjaEV2ZW50KG5hbWUkMSwgbGFzdEV2ZW50c1tuYW1lJDFdLCBudWxsLCBkb20sIGxpZmVjeWNs
ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
ICAgIGZ1bmN0aW9uIHBhdGNoRXZlbnQobmFtZSwgbGFzdFZhbHVlLCBuZXh0VmFsdWUsIGRvbSwg
bGlmZWN5Y2xlKSB7CisgICAgICAgIGlmIChsYXN0VmFsdWUgIT09IG5leHRWYWx1ZSkgeworICAg
ICAgICAgICAgdmFyIG5hbWVMb3dlckNhc2UgPSBuYW1lLnRvTG93ZXJDYXNlKCk7CisgICAgICAg
ICAgICB2YXIgZG9tRXZlbnQgPSBkb21bbmFtZUxvd2VyQ2FzZV07CisgICAgICAgICAgICAvLyBp
ZiB0aGUgZnVuY3Rpb24gaXMgd3JhcHBlZCwgdGhhdCBtZWFucyBpdCdzIGJlZW4gY29udHJvbGxl
ZCBieSBhIHdyYXBwZXIKKyAgICAgICAgICAgIGlmIChkb21FdmVudCAmJiBkb21FdmVudC53cmFw
cGVkKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaWYgKGRlbGVnYXRlZFByb3BzW25hbWVdKSB7CisgICAgICAgICAgICAgICAgbGlmZWN5Y2xl
LmZhc3RVbm1vdW50ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgaGFuZGxlRXZlbnQobmFtZSwg
bGFzdFZhbHVlLCBuZXh0VmFsdWUsIGRvbSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICBkb21bbmFtZUxvd2VyQ2FzZV0gPSBuZXh0VmFsdWU7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZnVuY3Rpb24gcGF0Y2hQcm9wcyhs
YXN0UHJvcHMsIG5leHRQcm9wcywgZG9tLCBsaWZlY3ljbGUsIGNvbnRleHQsIGlzU1ZHKSB7Cisg
ICAgICAgIGxhc3RQcm9wcyA9IGxhc3RQcm9wcyB8fCBFTVBUWV9PQko7CisgICAgICAgIG5leHRQ
cm9wcyA9IG5leHRQcm9wcyB8fCBFTVBUWV9PQko7CisgICAgICAgIGlmIChuZXh0UHJvcHMgIT09
IEVNUFRZX09CSikgeworICAgICAgICAgICAgZm9yICh2YXIgcHJvcCBpbiBuZXh0UHJvcHMpIHsK
KyAgICAgICAgICAgICAgICAvLyBkbyBub3QgYWRkIGEgaGFzT3duUHJvcGVydHkgY2hlY2sgaGVy
ZSwgaXQgYWZmZWN0cyBwZXJmb3JtYW5jZQorICAgICAgICAgICAgICAgIHZhciBuZXh0VmFsdWUg
PSBuZXh0UHJvcHNbcHJvcF07CisgICAgICAgICAgICAgICAgdmFyIGxhc3RWYWx1ZSA9IGxhc3RQ
cm9wc1twcm9wXTsKKyAgICAgICAgICAgICAgICBpZiAoaXNOdWxsT3JVbmRlZihuZXh0VmFsdWUp
KSB7CisgICAgICAgICAgICAgICAgICAgIHJlbW92ZVByb3AocHJvcCwgZG9tKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHBh
dGNoUHJvcChwcm9wLCBsYXN0VmFsdWUsIG5leHRWYWx1ZSwgZG9tLCBpc1NWRywgbGlmZWN5Y2xl
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
aWYgKGxhc3RQcm9wcyAhPT0gRU1QVFlfT0JKKSB7CisgICAgICAgICAgICBmb3IgKHZhciBwcm9w
JDEgaW4gbGFzdFByb3BzKSB7CisgICAgICAgICAgICAgICAgLy8gZG8gbm90IGFkZCBhIGhhc093
blByb3BlcnR5IGNoZWNrIGhlcmUsIGl0IGFmZmVjdHMgcGVyZm9ybWFuY2UKKyAgICAgICAgICAg
ICAgICBpZiAoaXNOdWxsT3JVbmRlZihuZXh0UHJvcHNbcHJvcCQxXSkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmVtb3ZlUHJvcChwcm9wJDEsIGRvbSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIC8vIFdlIGFyZSBhc3N1bWluZyBoZXJl
IHRoYXQgd2UgY29tZSBmcm9tIHBhdGNoUHJvcCByb3V0aW5lCisgICAgLy8gLW5leHRBdHRyVmFs
dWUgY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkCisgICAgZnVuY3Rpb24gcGF0Y2hTdHlsZShs
YXN0QXR0clZhbHVlLCBuZXh0QXR0clZhbHVlLCBkb20pIHsKKyAgICAgICAgaWYgKGlzU3RyaW5n
KG5leHRBdHRyVmFsdWUpKSB7CisgICAgICAgICAgICBkb20uc3R5bGUuY3NzVGV4dCA9IG5leHRB
dHRyVmFsdWU7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgZm9yICh2
YXIgc3R5bGUgaW4gbmV4dEF0dHJWYWx1ZSkgeworICAgICAgICAgICAgLy8gZG8gbm90IGFkZCBh
IGhhc093blByb3BlcnR5IGNoZWNrIGhlcmUsIGl0IGFmZmVjdHMgcGVyZm9ybWFuY2UKKyAgICAg
ICAgICAgIHZhciB2YWx1ZSA9IG5leHRBdHRyVmFsdWVbc3R5bGVdOworICAgICAgICAgICAgaWYg
KGlzTnVtYmVyKHZhbHVlKSAmJiAhaXNVbml0bGVzc051bWJlcltzdHlsZV0pIHsKKyAgICAgICAg
ICAgICAgICBkb20uc3R5bGVbc3R5bGVdID0gdmFsdWUgKyAncHgnOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgZG9tLnN0eWxlW3N0eWxlXSA9IHZh
bHVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICghaXNOdWxsT3JVbmRl
ZihsYXN0QXR0clZhbHVlKSkgeworICAgICAgICAgICAgZm9yICh2YXIgc3R5bGUkMSBpbiBsYXN0
QXR0clZhbHVlKSB7CisgICAgICAgICAgICAgICAgaWYgKGlzTnVsbE9yVW5kZWYobmV4dEF0dHJW
YWx1ZVtzdHlsZSQxXSkpIHsKKyAgICAgICAgICAgICAgICAgICAgZG9tLnN0eWxlW3N0eWxlJDFd
ID0gJyc7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorICAgIGZ1bmN0aW9uIHJlbW92ZVByb3AocHJvcCwgZG9tKSB7CisgICAgICAgIGlmIChwcm9w
ID09PSAnY2xhc3NOYW1lJykgeworICAgICAgICAgICAgZG9tLnJlbW92ZUF0dHJpYnV0ZSgnY2xh
c3MnKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChwcm9wID09PSAndmFsdWUnKSB7Cisg
ICAgICAgICAgICBkb20udmFsdWUgPSAnJzsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChw
cm9wID09PSAnc3R5bGUnKSB7CisgICAgICAgICAgICBkb20uc3R5bGUuY3NzVGV4dCA9IG51bGw7
CisgICAgICAgICAgICBkb20ucmVtb3ZlQXR0cmlidXRlKCdzdHlsZScpOworICAgICAgICB9Cisg
ICAgICAgIGVsc2UgaWYgKGRlbGVnYXRlZFByb3BzW3Byb3BdKSB7CisgICAgICAgICAgICBoYW5k
bGVFdmVudChwcm9wLCBudWxsLCBudWxsLCBkb20pOworICAgICAgICB9CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgZG9tLnJlbW92ZUF0dHJpYnV0ZShwcm9wKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHZhciByZWN5Y2xpbmdFbmFibGVkID0gdHJ1ZTsKKyAgICB2YXIgY29tcG9uZW50
UG9vbHMgPSBuZXcgTWFwKCk7CisgICAgdmFyIGVsZW1lbnRQb29scyA9IG5ldyBNYXAoKTsKKyAg
ICBmdW5jdGlvbiBkaXNhYmxlUmVjeWNsaW5nKCkgeworICAgICAgICByZWN5Y2xpbmdFbmFibGVk
ID0gZmFsc2U7CisgICAgICAgIGNvbXBvbmVudFBvb2xzLmNsZWFyKCk7CisgICAgICAgIGVsZW1l
bnRQb29scy5jbGVhcigpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHJlY3ljbGVFbGVtZW50KHZO
b2RlLCBsaWZlY3ljbGUsIGNvbnRleHQsIGlzU1ZHKSB7CisgICAgICAgIHZhciB0YWcgPSB2Tm9k
ZS50eXBlOworICAgICAgICB2YXIga2V5ID0gdk5vZGUua2V5OworICAgICAgICB2YXIgcG9vbHMg
PSBlbGVtZW50UG9vbHMuZ2V0KHRhZyk7CisgICAgICAgIGlmICghaXNVbmRlZmluZWQocG9vbHMp
KSB7CisgICAgICAgICAgICB2YXIgcG9vbCA9IGtleSA9PT0gbnVsbCA/IHBvb2xzLm5vbktleWVk
IDogcG9vbHMua2V5ZWQuZ2V0KGtleSk7CisgICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKHBv
b2wpKSB7CisgICAgICAgICAgICAgICAgdmFyIHJlY3ljbGVkVk5vZGUgPSBwb29sLnBvcCgpOwor
ICAgICAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQocmVjeWNsZWRWTm9kZSkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgcGF0Y2hFbGVtZW50KHJlY3ljbGVkVk5vZGUsIHZOb2RlLCBudWxsLCBs
aWZlY3ljbGUsIGNvbnRleHQsIGlzU1ZHLCB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHZOb2RlLmRvbTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIGZ1bmN0aW9uIHBvb2xFbGVtZW50
KHZOb2RlKSB7CisgICAgICAgIHZhciB0YWcgPSB2Tm9kZS50eXBlOworICAgICAgICB2YXIga2V5
ID0gdk5vZGUua2V5OworICAgICAgICB2YXIgcG9vbHMgPSBlbGVtZW50UG9vbHMuZ2V0KHRhZyk7
CisgICAgICAgIGlmIChpc1VuZGVmaW5lZChwb29scykpIHsKKyAgICAgICAgICAgIHBvb2xzID0g
eworICAgICAgICAgICAgICAgIG5vbktleWVkOiBbXSwKKyAgICAgICAgICAgICAgICBrZXllZDog
bmV3IE1hcCgpCisgICAgICAgICAgICB9OworICAgICAgICAgICAgZWxlbWVudFBvb2xzLnNldCh0
YWcsIHBvb2xzKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXNOdWxsKGtleSkpIHsKKyAgICAg
ICAgICAgIHBvb2xzLm5vbktleWVkLnB1c2godk5vZGUpOworICAgICAgICB9CisgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgdmFyIHBvb2wgPSBwb29scy5rZXllZC5nZXQoa2V5KTsKKyAgICAg
ICAgICAgIGlmIChpc1VuZGVmaW5lZChwb29sKSkgeworICAgICAgICAgICAgICAgIHBvb2wgPSBb
XTsKKyAgICAgICAgICAgICAgICBwb29scy5rZXllZC5zZXQoa2V5LCBwb29sKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHBvb2wucHVzaCh2Tm9kZSk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgZnVuY3Rpb24gcmVjeWNsZUNvbXBvbmVudCh2Tm9kZSwgbGlmZWN5Y2xlLCBjb250ZXh0LCBp
c1NWRykgeworICAgICAgICB2YXIgdHlwZSA9IHZOb2RlLnR5cGU7CisgICAgICAgIHZhciBrZXkg
PSB2Tm9kZS5rZXk7CisgICAgICAgIHZhciBwb29scyA9IGNvbXBvbmVudFBvb2xzLmdldCh0eXBl
KTsKKyAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChwb29scykpIHsKKyAgICAgICAgICAgIHZhciBw
b29sID0ga2V5ID09PSBudWxsID8gcG9vbHMubm9uS2V5ZWQgOiBwb29scy5rZXllZC5nZXQoa2V5
KTsKKyAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQocG9vbCkpIHsKKyAgICAgICAgICAgICAg
ICB2YXIgcmVjeWNsZWRWTm9kZSA9IHBvb2wucG9wKCk7CisgICAgICAgICAgICAgICAgaWYgKCFp
c1VuZGVmaW5lZChyZWN5Y2xlZFZOb2RlKSkgeworICAgICAgICAgICAgICAgICAgICB2YXIgZmxh
Z3MgPSB2Tm9kZS5mbGFnczsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGZhaWxlZCA9IHBhdGNo
Q29tcG9uZW50KHJlY3ljbGVkVk5vZGUsIHZOb2RlLCBudWxsLCBsaWZlY3ljbGUsIGNvbnRleHQs
IGlzU1ZHLCBmbGFncyAmIDQgLyogQ29tcG9uZW50Q2xhc3MgKi8sIHRydWUpOworICAgICAgICAg
ICAgICAgICAgICBpZiAoIWZhaWxlZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHZOb2RlLmRvbTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisgICAg
ZnVuY3Rpb24gcG9vbENvbXBvbmVudCh2Tm9kZSkgeworICAgICAgICB2YXIgdHlwZSA9IHZOb2Rl
LnR5cGU7CisgICAgICAgIHZhciBrZXkgPSB2Tm9kZS5rZXk7CisgICAgICAgIHZhciBob29rcyA9
IHZOb2RlLnJlZjsKKyAgICAgICAgdmFyIG5vblJlY3ljbGVIb29rcyA9IGhvb2tzICYmIChob29r
cy5vbkNvbXBvbmVudFdpbGxNb3VudCB8fAorICAgICAgICAgICAgaG9va3Mub25Db21wb25lbnRX
aWxsVW5tb3VudCB8fAorICAgICAgICAgICAgaG9va3Mub25Db21wb25lbnREaWRNb3VudCB8fAor
ICAgICAgICAgICAgaG9va3Mub25Db21wb25lbnRXaWxsVXBkYXRlIHx8CisgICAgICAgICAgICBo
b29rcy5vbkNvbXBvbmVudERpZFVwZGF0ZSk7CisgICAgICAgIGlmIChub25SZWN5Y2xlSG9va3Mp
IHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB2YXIgcG9vbHMgPSBj
b21wb25lbnRQb29scy5nZXQodHlwZSk7CisgICAgICAgIGlmIChpc1VuZGVmaW5lZChwb29scykp
IHsKKyAgICAgICAgICAgIHBvb2xzID0geworICAgICAgICAgICAgICAgIG5vbktleWVkOiBbXSwK
KyAgICAgICAgICAgICAgICBrZXllZDogbmV3IE1hcCgpCisgICAgICAgICAgICB9OworICAgICAg
ICAgICAgY29tcG9uZW50UG9vbHMuc2V0KHR5cGUsIHBvb2xzKTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoaXNOdWxsKGtleSkpIHsKKyAgICAgICAgICAgIHBvb2xzLm5vbktleWVkLnB1c2godk5v
ZGUpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdmFyIHBvb2wgPSBw
b29scy5rZXllZC5nZXQoa2V5KTsKKyAgICAgICAgICAgIGlmIChpc1VuZGVmaW5lZChwb29sKSkg
eworICAgICAgICAgICAgICAgIHBvb2wgPSBbXTsKKyAgICAgICAgICAgICAgICBwb29scy5rZXll
ZC5zZXQoa2V5LCBwb29sKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBvb2wucHVzaCh2
Tm9kZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBtb3VudCh2Tm9kZSwgcGFy
ZW50RG9tLCBsaWZlY3ljbGUsIGNvbnRleHQsIGlzU1ZHKSB7CisgICAgICAgIHZhciBmbGFncyA9
IHZOb2RlLmZsYWdzOworICAgICAgICBpZiAoZmxhZ3MgJiAzOTcwIC8qIEVsZW1lbnQgKi8pIHsK
KyAgICAgICAgICAgIHJldHVybiBtb3VudEVsZW1lbnQodk5vZGUsIHBhcmVudERvbSwgbGlmZWN5
Y2xlLCBjb250ZXh0LCBpc1NWRyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoZmxhZ3Mg
JiAyOCAvKiBDb21wb25lbnQgKi8pIHsKKyAgICAgICAgICAgIHJldHVybiBtb3VudENvbXBvbmVu
dCh2Tm9kZSwgcGFyZW50RG9tLCBsaWZlY3ljbGUsIGNvbnRleHQsIGlzU1ZHLCBmbGFncyAmIDQg
LyogQ29tcG9uZW50Q2xhc3MgKi8pOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGZsYWdz
ICYgNDA5NiAvKiBWb2lkICovKSB7CisgICAgICAgICAgICByZXR1cm4gbW91bnRWb2lkKHZOb2Rl
LCBwYXJlbnREb20pOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGZsYWdzICYgMSAvKiBU
ZXh0ICovKSB7CisgICAgICAgICAgICByZXR1cm4gbW91bnRUZXh0KHZOb2RlLCBwYXJlbnREb20p
OworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKGZhbHNlKSB7Cisg
ICAgICAgICAgICAgICAgdGhyb3dFcnJvcigoIm1vdW50KCkgZXhwZWN0cyBhIHZhbGlkIFZOb2Rl
LCBpbnN0ZWFkIGl0IHJlY2VpdmVkIGFuIG9iamVjdCB3aXRoIHRoZSB0eXBlIFwiIiArICh0eXBl
b2Ygdk5vZGUpICsgIlwiLiIpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRocm93RXJy
b3IoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBmdW5jdGlvbiBtb3VudFRleHQodk5vZGUsIHBh
cmVudERvbSkgeworICAgICAgICB2YXIgZG9tID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodk5v
ZGUuY2hpbGRyZW4pOworICAgICAgICB2Tm9kZS5kb20gPSBkb207CisgICAgICAgIGlmIChwYXJl
bnREb20pIHsKKyAgICAgICAgICAgIGFwcGVuZENoaWxkKHBhcmVudERvbSwgZG9tKTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gZG9tOworICAgIH0KKyAgICBmdW5jdGlvbiBtb3VudFZvaWQo
dk5vZGUsIHBhcmVudERvbSkgeworICAgICAgICB2YXIgZG9tID0gZG9jdW1lbnQuY3JlYXRlVGV4
dE5vZGUoJycpOworICAgICAgICB2Tm9kZS5kb20gPSBkb207CisgICAgICAgIGlmIChwYXJlbnRE
b20pIHsKKyAgICAgICAgICAgIGFwcGVuZENoaWxkKHBhcmVudERvbSwgZG9tKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gZG9tOworICAgIH0KKyAgICBmdW5jdGlvbiBtb3VudEVsZW1lbnQo
dk5vZGUsIHBhcmVudERvbSwgbGlmZWN5Y2xlLCBjb250ZXh0LCBpc1NWRykgeworICAgICAgICBp
ZiAocmVjeWNsaW5nRW5hYmxlZCkgeworICAgICAgICAgICAgdmFyIGRvbSQxID0gcmVjeWNsZUVs
ZW1lbnQodk5vZGUsIGxpZmVjeWNsZSwgY29udGV4dCwgaXNTVkcpOworICAgICAgICAgICAgaWYg
KCFpc051bGwoZG9tJDEpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFpc051bGwocGFyZW50RG9t
KSkgeworICAgICAgICAgICAgICAgICAgICBhcHBlbmRDaGlsZChwYXJlbnREb20sIGRvbSQxKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIGRvbSQxOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIHZhciB0YWcgPSB2Tm9kZS50eXBlOworICAgICAg
ICB2YXIgZmxhZ3MgPSB2Tm9kZS5mbGFnczsKKyAgICAgICAgaWYgKGlzU1ZHIHx8IChmbGFncyAm
IDEyOCAvKiBTdmdFbGVtZW50ICovKSkgeworICAgICAgICAgICAgaXNTVkcgPSB0cnVlOworICAg
ICAgICB9CisgICAgICAgIHZhciBkb20gPSBkb2N1bWVudENyZWF0ZUVsZW1lbnQodGFnLCBpc1NW
Ryk7CisgICAgICAgIHZhciBjaGlsZHJlbiA9IHZOb2RlLmNoaWxkcmVuOworICAgICAgICB2YXIg
cHJvcHMgPSB2Tm9kZS5wcm9wczsKKyAgICAgICAgdmFyIGV2ZW50cyA9IHZOb2RlLmV2ZW50czsK
KyAgICAgICAgdmFyIHJlZiA9IHZOb2RlLnJlZjsKKyAgICAgICAgdk5vZGUuZG9tID0gZG9tOwor
ICAgICAgICBpZiAoIWlzTnVsbChjaGlsZHJlbikpIHsKKyAgICAgICAgICAgIGlmIChpc1N0cmlu
Z09yTnVtYmVyKGNoaWxkcmVuKSkgeworICAgICAgICAgICAgICAgIHNldFRleHRDb250ZW50KGRv
bSwgY2hpbGRyZW4pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoaXNBcnJh
eShjaGlsZHJlbikpIHsKKyAgICAgICAgICAgICAgICBtb3VudEFycmF5Q2hpbGRyZW4oY2hpbGRy
ZW4sIGRvbSwgbGlmZWN5Y2xlLCBjb250ZXh0LCBpc1NWRyk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBlbHNlIGlmIChpc1ZOb2RlKGNoaWxkcmVuKSkgeworICAgICAgICAgICAgICAgIG1v
dW50KGNoaWxkcmVuLCBkb20sIGxpZmVjeWNsZSwgY29udGV4dCwgaXNTVkcpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIGlmICghKGZsYWdzICYgMiAvKiBIdG1sRWxlbWVudCAq
LykpIHsKKyAgICAgICAgICAgIHByb2Nlc3NFbGVtZW50KGZsYWdzLCB2Tm9kZSwgZG9tKTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoIWlzTnVsbChwcm9wcykpIHsKKyAgICAgICAgICAgIGZvciAo
dmFyIHByb3AgaW4gcHJvcHMpIHsKKyAgICAgICAgICAgICAgICAvLyBkbyBub3QgYWRkIGEgaGFz
T3duUHJvcGVydHkgY2hlY2sgaGVyZSwgaXQgYWZmZWN0cyBwZXJmb3JtYW5jZQorICAgICAgICAg
ICAgICAgIHBhdGNoUHJvcChwcm9wLCBudWxsLCBwcm9wc1twcm9wXSwgZG9tLCBpc1NWRywgbGlm
ZWN5Y2xlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoIWlzTnVsbChl
dmVudHMpKSB7CisgICAgICAgICAgICBmb3IgKHZhciBuYW1lIGluIGV2ZW50cykgeworICAgICAg
ICAgICAgICAgIC8vIGRvIG5vdCBhZGQgYSBoYXNPd25Qcm9wZXJ0eSBjaGVjayBoZXJlLCBpdCBh
ZmZlY3RzIHBlcmZvcm1hbmNlCisgICAgICAgICAgICAgICAgcGF0Y2hFdmVudChuYW1lLCBudWxs
LCBldmVudHNbbmFtZV0sIGRvbSwgbGlmZWN5Y2xlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICBpZiAoIWlzTnVsbChyZWYpKSB7CisgICAgICAgICAgICBtb3VudFJlZihkb20s
IHJlZiwgbGlmZWN5Y2xlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWlzTnVsbChwYXJlbnRE
b20pKSB7CisgICAgICAgICAgICBhcHBlbmRDaGlsZChwYXJlbnREb20sIGRvbSk7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIGRvbTsKKyAgICB9CisgICAgZnVuY3Rpb24gbW91bnRBcnJheUNo
aWxkcmVuKGNoaWxkcmVuLCBkb20sIGxpZmVjeWNsZSwgY29udGV4dCwgaXNTVkcpIHsKKyAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykgeworICAgICAgICAg
ICAgdmFyIGNoaWxkID0gY2hpbGRyZW5baV07CisgICAgICAgICAgICBpZiAoIWlzSW52YWxpZChj
aGlsZCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoY2hpbGQuZG9tKSB7CisgICAgICAgICAgICAg
ICAgICAgIGNoaWxkcmVuW2ldID0gY2hpbGQgPSBjbG9uZVZOb2RlKGNoaWxkKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgbW91bnQoY2hpbGRyZW5baV0sIGRvbSwgbGlmZWN5
Y2xlLCBjb250ZXh0LCBpc1NWRyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cisg
ICAgZnVuY3Rpb24gbW91bnRDb21wb25lbnQodk5vZGUsIHBhcmVudERvbSwgbGlmZWN5Y2xlLCBj
b250ZXh0LCBpc1NWRywgaXNDbGFzcykgeworICAgICAgICBpZiAocmVjeWNsaW5nRW5hYmxlZCkg
eworICAgICAgICAgICAgdmFyIGRvbSQxID0gcmVjeWNsZUNvbXBvbmVudCh2Tm9kZSwgbGlmZWN5
Y2xlLCBjb250ZXh0LCBpc1NWRyk7CisgICAgICAgICAgICBpZiAoIWlzTnVsbChkb20kMSkpIHsK
KyAgICAgICAgICAgICAgICBpZiAoIWlzTnVsbChwYXJlbnREb20pKSB7CisgICAgICAgICAgICAg
ICAgICAgIGFwcGVuZENoaWxkKHBhcmVudERvbSwgZG9tJDEpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICByZXR1cm4gZG9tJDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgdmFyIHR5cGUgPSB2Tm9kZS50eXBlOworICAgICAgICB2YXIgcHJvcHMgPSB2Tm9k
ZS5wcm9wcyB8fCBFTVBUWV9PQko7CisgICAgICAgIHZhciByZWYgPSB2Tm9kZS5yZWY7CisgICAg
ICAgIHZhciBkb207CisgICAgICAgIGlmIChpc0NsYXNzKSB7CisgICAgICAgICAgICB2YXIgZGVm
YXVsdFByb3BzID0gdHlwZS5kZWZhdWx0UHJvcHM7CisgICAgICAgICAgICBsaWZlY3ljbGUuZmFz
dFVubW91bnQgPSBmYWxzZTsKKyAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQoZGVmYXVsdFBy
b3BzKSkgeworICAgICAgICAgICAgICAgIGNvcHlQcm9wc1RvKGRlZmF1bHRQcm9wcywgcHJvcHMp
OworICAgICAgICAgICAgICAgIHZOb2RlLnByb3BzID0gcHJvcHM7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB2YXIgaW5zdGFuY2UgPSBjcmVhdGVTdGF0ZWZ1bENvbXBvbmVudEluc3RhbmNl
KHZOb2RlLCB0eXBlLCBwcm9wcywgY29udGV4dCwgaXNTVkcsIGRldlRvb2xzU3RhdHVzKTsKKyAg
ICAgICAgICAgIHZhciBpbnB1dCA9IGluc3RhbmNlLl9sYXN0SW5wdXQ7CisgICAgICAgICAgICB2
YXIgZmFzdFVubW91bnQgPSBsaWZlY3ljbGUuZmFzdFVubW91bnQ7CisgICAgICAgICAgICAvLyB3
ZSBzdG9yZSB0aGUgZmFzdFVubW91bnQgdmFsdWUsIGJ1dCB3ZSBzZXQgaXQgYmFjayB0byB0cnVl
IG9uIHRoZSBsaWZlY3ljbGUKKyAgICAgICAgICAgIC8vIHdlIGRvIHRoaXMgc28gd2UgY2FuIGRl
dGVybWluZSBpZiB0aGUgY29tcG9uZW50IHJlbmRlciBoYXMgYSBmYXN0VW5tb3VudCBvciBub3QK
KyAgICAgICAgICAgIGxpZmVjeWNsZS5mYXN0VW5tb3VudCA9IHRydWU7CisgICAgICAgICAgICBp
bnN0YW5jZS5fdk5vZGUgPSB2Tm9kZTsKKyAgICAgICAgICAgIHZOb2RlLmRvbSA9IGRvbSA9IG1v
dW50KGlucHV0LCBudWxsLCBsaWZlY3ljbGUsIGluc3RhbmNlLl9jaGlsZENvbnRleHQsIGlzU1ZH
KTsKKyAgICAgICAgICAgIC8vIHdlIG5vdyBjcmVhdGUgYSBsaWZlY3ljbGUgZm9yIHRoaXMgY29t
cG9uZW50IGFuZCBzdG9yZSB0aGUgZmFzdFVubW91bnQgdmFsdWUKKyAgICAgICAgICAgIHZhciBz
dWJMaWZlY3ljbGUgPSBpbnN0YW5jZS5fbGlmZWN5Y2xlID0gbmV3IExpZmVjeWNsZSgpOworICAg
ICAgICAgICAgc3ViTGlmZWN5Y2xlLmZhc3RVbm1vdW50ID0gbGlmZWN5Y2xlLmZhc3RVbm1vdW50
OworICAgICAgICAgICAgLy8gd2UgdGhlbiBzZXQgdGhlIGxpZmVjeWNsZSBmYXN0VW5tb3VudCB2
YWx1ZSBiYWNrIHRvIHdoYXQgaXQgd2FzIGJlZm9yZSB0aGUgbW91bnQKKyAgICAgICAgICAgIGxp
ZmVjeWNsZS5mYXN0VW5tb3VudCA9IGZhc3RVbm1vdW50OworICAgICAgICAgICAgaWYgKCFpc051
bGwocGFyZW50RG9tKSkgeworICAgICAgICAgICAgICAgIGFwcGVuZENoaWxkKHBhcmVudERvbSwg
ZG9tKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1vdW50U3RhdGVmdWxDb21wb25lbnRD
YWxsYmFja3MocmVmLCBpbnN0YW5jZSwgbGlmZWN5Y2xlKTsKKyAgICAgICAgICAgIGZpbmRET01O
b2RlRW5hYmxlZCAmJiBjb21wb25lbnRUb0RPTU5vZGVNYXAuc2V0KGluc3RhbmNlLCBkb20pOwor
ICAgICAgICAgICAgdk5vZGUuY2hpbGRyZW4gPSBpbnN0YW5jZTsKKyAgICAgICAgfQorICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgIHZhciBpbnB1dCQxID0gY3JlYXRlU3RhdGVsZXNzQ29tcG9u
ZW50SW5wdXQodk5vZGUsIHR5cGUsIHByb3BzLCBjb250ZXh0KTsKKyAgICAgICAgICAgIHZOb2Rl
LmRvbSA9IGRvbSA9IG1vdW50KGlucHV0JDEsIG51bGwsIGxpZmVjeWNsZSwgY29udGV4dCwgaXNT
VkcpOworICAgICAgICAgICAgdk5vZGUuY2hpbGRyZW4gPSBpbnB1dCQxOworICAgICAgICAgICAg
bW91bnRTdGF0ZWxlc3NDb21wb25lbnRDYWxsYmFja3MocmVmLCBkb20sIGxpZmVjeWNsZSk7Cisg
ICAgICAgICAgICBpZiAoIWlzTnVsbChwYXJlbnREb20pKSB7CisgICAgICAgICAgICAgICAgYXBw
ZW5kQ2hpbGQocGFyZW50RG9tLCBkb20pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIHJldHVybiBkb207CisgICAgfQorICAgIGZ1bmN0aW9uIG1vdW50U3RhdGVmdWxDb21wb25l
bnRDYWxsYmFja3MocmVmLCBpbnN0YW5jZSwgbGlmZWN5Y2xlKSB7CisgICAgICAgIGlmIChyZWYp
IHsKKyAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHJlZikpIHsKKyAgICAgICAgICAgICAgICBy
ZWYoaW5zdGFuY2UpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgaWYgKGZhbHNlKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3IoJ3N0
cmluZyAicmVmcyIgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gSW5mZXJubyAxLjAuIFVzZSBjYWxsYmFj
ayAicmVmcyIgaW5zdGVhZC4nKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
dGhyb3dFcnJvcigpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICghaXNO
dWxsKGluc3RhbmNlLmNvbXBvbmVudERpZE1vdW50KSkgeworICAgICAgICAgICAgbGlmZWN5Y2xl
LmFkZExpc3RlbmVyKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICBpbnN0YW5jZS5jb21w
b25lbnREaWRNb3VudCgpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICB9CisgICAg
ZnVuY3Rpb24gbW91bnRTdGF0ZWxlc3NDb21wb25lbnRDYWxsYmFja3MocmVmLCBkb20sIGxpZmVj
eWNsZSkgeworICAgICAgICBpZiAocmVmKSB7CisgICAgICAgICAgICBpZiAoIWlzTnVsbE9yVW5k
ZWYocmVmLm9uQ29tcG9uZW50V2lsbE1vdW50KSkgeworICAgICAgICAgICAgICAgIGxpZmVjeWNs
ZS5mYXN0VW5tb3VudCA9IGZhbHNlOworICAgICAgICAgICAgICAgIHJlZi5vbkNvbXBvbmVudFdp
bGxNb3VudCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFpc051bGxPclVuZGVm
KHJlZi5vbkNvbXBvbmVudERpZE1vdW50KSkgeworICAgICAgICAgICAgICAgIGxpZmVjeWNsZS5m
YXN0VW5tb3VudCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGxpZmVjeWNsZS5hZGRMaXN0ZW5l
cihmdW5jdGlvbiAoKSB7IHJldHVybiByZWYub25Db21wb25lbnREaWRNb3VudChkb20pOyB9KTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBmdW5jdGlvbiBtb3VudFJlZihk
b20sIHZhbHVlLCBsaWZlY3ljbGUpIHsKKyAgICAgICAgaWYgKGlzRnVuY3Rpb24odmFsdWUpKSB7
CisgICAgICAgICAgICBsaWZlY3ljbGUuZmFzdFVubW91bnQgPSBmYWxzZTsKKyAgICAgICAgICAg
IGxpZmVjeWNsZS5hZGRMaXN0ZW5lcihmdW5jdGlvbiAoKSB7IHJldHVybiB2YWx1ZShkb20pOyB9
KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmIChpc0ludmFsaWQo
dmFsdWUpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKGZhbHNlKSB7CisgICAgICAgICAgICAgICAgdGhyb3dFcnJvcignc3RyaW5nICJy
ZWZzIiBhcmUgbm90IHN1cHBvcnRlZCBpbiBJbmZlcm5vIDEuMC4gVXNlIGNhbGxiYWNrICJyZWZz
IiBpbnN0ZWFkLicpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhyb3dFcnJvcigpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gY29weVByb3BzVG8oY29weUZyb20sIGNv
cHlUbykgeworICAgICAgICBmb3IgKHZhciBwcm9wIGluIGNvcHlGcm9tKSB7CisgICAgICAgICAg
ICBpZiAoaXNVbmRlZmluZWQoY29weVRvW3Byb3BdKSkgeworICAgICAgICAgICAgICAgIGNvcHlU
b1twcm9wXSA9IGNvcHlGcm9tW3Byb3BdOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorICAgIGZ1bmN0aW9uIGNyZWF0ZVN0YXRlZnVsQ29tcG9uZW50SW5zdGFuY2Uodk5vZGUsIENv
bXBvbmVudCwgcHJvcHMsIGNvbnRleHQsIGlzU1ZHLCBkZXZUb29sc1N0YXR1cykgeworICAgICAg
ICBpZiAoaXNVbmRlZmluZWQoY29udGV4dCkpIHsKKyAgICAgICAgICAgIGNvbnRleHQgPSB7fTsK
KyAgICAgICAgfQorICAgICAgICB2YXIgaW5zdGFuY2UgPSBuZXcgQ29tcG9uZW50KHByb3BzLCBj
b250ZXh0KTsKKyAgICAgICAgaW5zdGFuY2UuY29udGV4dCA9IGNvbnRleHQ7CisgICAgICAgIGlm
IChpbnN0YW5jZS5wcm9wcyA9PT0gRU1QVFlfT0JKKSB7CisgICAgICAgICAgICBpbnN0YW5jZS5w
cm9wcyA9IHByb3BzOworICAgICAgICB9CisgICAgICAgIGluc3RhbmNlLl9wYXRjaCA9IHBhdGNo
OworICAgICAgICBpbnN0YW5jZS5fZGV2VG9vbHNTdGF0dXMgPSBkZXZUb29sc1N0YXR1czsKKyAg
ICAgICAgaWYgKGZpbmRET01Ob2RlRW5hYmxlZCkgeworICAgICAgICAgICAgaW5zdGFuY2UuX2Nv
bXBvbmVudFRvRE9NTm9kZU1hcCA9IGNvbXBvbmVudFRvRE9NTm9kZU1hcDsKKyAgICAgICAgfQor
ICAgICAgICB2YXIgY2hpbGRDb250ZXh0ID0gaW5zdGFuY2UuZ2V0Q2hpbGRDb250ZXh0KCk7Cisg
ICAgICAgIGlmICghaXNOdWxsT3JVbmRlZihjaGlsZENvbnRleHQpKSB7CisgICAgICAgICAgICBp
bnN0YW5jZS5fY2hpbGRDb250ZXh0ID0gT2JqZWN0LmFzc2lnbih7fSwgY29udGV4dCwgY2hpbGRD
b250ZXh0KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGluc3RhbmNl
Ll9jaGlsZENvbnRleHQgPSBjb250ZXh0OworICAgICAgICB9CisgICAgICAgIGluc3RhbmNlLl91
bm1vdW50ZWQgPSBmYWxzZTsKKyAgICAgICAgaW5zdGFuY2UuX3BlbmRpbmdTZXRTdGF0ZSA9IHRy
dWU7CisgICAgICAgIGluc3RhbmNlLl9pc1NWRyA9IGlzU1ZHOworICAgICAgICBpbnN0YW5jZS5j
b21wb25lbnRXaWxsTW91bnQoKTsKKyAgICAgICAgaW5zdGFuY2UuX2JlZm9yZVJlbmRlciAmJiBp
bnN0YW5jZS5fYmVmb3JlUmVuZGVyKCk7CisgICAgICAgIHZhciBpbnB1dCA9IGluc3RhbmNlLnJl
bmRlcihwcm9wcywgaW5zdGFuY2Uuc3RhdGUsIGNvbnRleHQpOworICAgICAgICBpbnN0YW5jZS5f
YWZ0ZXJSZW5kZXIgJiYgaW5zdGFuY2UuX2FmdGVyUmVuZGVyKCk7CisgICAgICAgIGlmIChpc0Fy
cmF5KGlucHV0KSkgeworICAgICAgICAgICAgaWYgKGZhbHNlKSB7CisgICAgICAgICAgICAgICAg
dGhyb3dFcnJvcignYSB2YWxpZCBJbmZlcm5vIFZOb2RlIChvciBudWxsKSBtdXN0IGJlIHJldHVy
bmVkIGZyb20gYSBjb21wb25lbnQgcmVuZGVyLiBZb3UgbWF5IGhhdmUgcmV0dXJuZWQgYW4gYXJy
YXkgb3IgYW4gaW52YWxpZCBvYmplY3QuJyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0
aHJvd0Vycm9yKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaXNJbnZhbGlkKGlucHV0
KSkgeworICAgICAgICAgICAgaW5wdXQgPSBjcmVhdGVWb2lkVk5vZGUoKTsKKyAgICAgICAgfQor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmIChpbnB1dC5kb20pIHsKKyAgICAgICAgICAg
ICAgICBpbnB1dCA9IGNsb25lVk5vZGUoaW5wdXQpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaWYgKGlucHV0LmZsYWdzICYgMjggLyogQ29tcG9uZW50ICovKSB7CisgICAgICAgICAgICAg
ICAgLy8gaWYgd2UgaGF2ZSBhbiBpbnB1dCB0aGF0IGlzIGFsc28gYSBjb21wb25lbnQsIHdlIHJ1
biBpbnRvIGEgdHJpY2t5IHNpdHVhdGlvbgorICAgICAgICAgICAgICAgIC8vIHdoZXJlIHRoZSBy
b290IHZOb2RlIG5lZWRzIHRvIGFsd2F5cyBoYXZlIHRoZSBjb3JyZWN0IERPTSBlbnRyeQorICAg
ICAgICAgICAgICAgIC8vIHNvIHdlIGJyZWFrIG1vbm9tb3JwaGlzbSBvbiBvdXIgaW5wdXQgYW5k
IHN1cHBseSBpdCBvdXIgdk5vZGUgYXMgcGFyZW50Vk5vZGUKKyAgICAgICAgICAgICAgICAvLyB3
ZSBjYW4gb3B0aW1pc2UgdGhpcyBpbiB0aGUgZnV0dXJlLCBidXQgdGhpcyBnZXRzIHVzIG91dCBv
ZiBhIGxvdCBvZiBpc3N1ZXMKKyAgICAgICAgICAgICAgICBpbnB1dC5wYXJlbnRWTm9kZSA9IHZO
b2RlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGluc3RhbmNlLl9wZW5kaW5n
U2V0U3RhdGUgPSBmYWxzZTsKKyAgICAgICAgaW5zdGFuY2UuX2xhc3RJbnB1dCA9IGlucHV0Owor
ICAgICAgICByZXR1cm4gaW5zdGFuY2U7CisgICAgfQorICAgIGZ1bmN0aW9uIHJlcGxhY2VMYXN0
Q2hpbGRBbmRVbm1vdW50KGxhc3RJbnB1dCwgbmV4dElucHV0LCBwYXJlbnREb20sIGxpZmVjeWNs
ZSwgY29udGV4dCwgaXNTVkcsIGlzUmVjeWNsaW5nKSB7CisgICAgICAgIHJlcGxhY2VWTm9kZShw
YXJlbnREb20sIG1vdW50KG5leHRJbnB1dCwgbnVsbCwgbGlmZWN5Y2xlLCBjb250ZXh0LCBpc1NW
RyksIGxhc3RJbnB1dCwgbGlmZWN5Y2xlLCBpc1JlY3ljbGluZyk7CisgICAgfQorICAgIGZ1bmN0
aW9uIHJlcGxhY2VWTm9kZShwYXJlbnREb20sIGRvbSwgdk5vZGUsIGxpZmVjeWNsZSwgaXNSZWN5
Y2xpbmcpIHsKKyAgICAgICAgdmFyIHNoYWxsb3dVbm1vdW50ID0gZmFsc2U7CisgICAgICAgIC8v
IHdlIGNhbm5vdCBjYWNoZSBub2RlVHlwZSBoZXJlIGFzIHZOb2RlIG1pZ2h0IGJlIHJlLWFzc2ln
bmVkIGJlbG93CisgICAgICAgIGlmICh2Tm9kZS5mbGFncyAmIDI4IC8qIENvbXBvbmVudCAqLykg
eworICAgICAgICAgICAgLy8gaWYgd2UgYXJlIGFjY2Vzc2luZyBhIHN0YXRlZnVsIG9yIHN0YXRl
bGVzcyBjb21wb25lbnQsIHdlIHdhbnQgdG8gYWNjZXNzIHRoZWlyIGxhc3QgcmVuZGVyZWQgaW5w
dXQKKyAgICAgICAgICAgIC8vIGFjY2Vzc2luZyB0aGVpciBET00gbm9kZSBpcyBub3QgdXNlZnVs
IHRvIHVzIGhlcmUKKyAgICAgICAgICAgIHVubW91bnQodk5vZGUsIG51bGwsIGxpZmVjeWNsZSwg
ZmFsc2UsIGZhbHNlLCBpc1JlY3ljbGluZyk7CisgICAgICAgICAgICB2Tm9kZSA9IHZOb2RlLmNo
aWxkcmVuLl9sYXN0SW5wdXQgfHwgdk5vZGUuY2hpbGRyZW47CisgICAgICAgICAgICBzaGFsbG93
VW5tb3VudCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmVwbGFjZUNoaWxkKHBhcmVudERv
bSwgZG9tLCB2Tm9kZS5kb20pOworICAgICAgICB1bm1vdW50KHZOb2RlLCBudWxsLCBsaWZlY3lj
bGUsIGZhbHNlLCBzaGFsbG93VW5tb3VudCwgaXNSZWN5Y2xpbmcpOworICAgIH0KKyAgICBmdW5j
dGlvbiBjcmVhdGVTdGF0ZWxlc3NDb21wb25lbnRJbnB1dCh2Tm9kZSwgY29tcG9uZW50LCBwcm9w
cywgY29udGV4dCkgeworICAgICAgICB2YXIgaW5wdXQgPSBjb21wb25lbnQocHJvcHMsIGNvbnRl
eHQpOworICAgICAgICBpZiAoaXNBcnJheShpbnB1dCkpIHsKKyAgICAgICAgICAgIGlmIChmYWxz
ZSkgeworICAgICAgICAgICAgICAgIHRocm93RXJyb3IoJ2EgdmFsaWQgSW5mZXJubyBWTm9kZSAo
b3IgbnVsbCkgbXVzdCBiZSByZXR1cm5lZCBmcm9tIGEgY29tcG9uZW50IHJlbmRlci4gWW91IG1h
eSBoYXZlIHJldHVybmVkIGFuIGFycmF5IG9yIGFuIGludmFsaWQgb2JqZWN0LicpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgdGhyb3dFcnJvcigpOworICAgICAgICB9CisgICAgICAgIGVs
c2UgaWYgKGlzSW52YWxpZChpbnB1dCkpIHsKKyAgICAgICAgICAgIGlucHV0ID0gY3JlYXRlVm9p
ZFZOb2RlKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiAoaW5w
dXQuZG9tKSB7CisgICAgICAgICAgICAgICAgaW5wdXQgPSBjbG9uZVZOb2RlKGlucHV0KTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChpbnB1dC5mbGFncyAmIDI4IC8qIENvbXBvbmVu
dCAqLykgeworICAgICAgICAgICAgICAgIC8vIGlmIHdlIGhhdmUgYW4gaW5wdXQgdGhhdCBpcyBh
bHNvIGEgY29tcG9uZW50LCB3ZSBydW4gaW50byBhIHRyaWNreSBzaXR1YXRpb24KKyAgICAgICAg
ICAgICAgICAvLyB3aGVyZSB0aGUgcm9vdCB2Tm9kZSBuZWVkcyB0byBhbHdheXMgaGF2ZSB0aGUg
Y29ycmVjdCBET00gZW50cnkKKyAgICAgICAgICAgICAgICAvLyBzbyB3ZSBicmVhayBtb25vbW9y
cGhpc20gb24gb3VyIGlucHV0IGFuZCBzdXBwbHkgaXQgb3VyIHZOb2RlIGFzIHBhcmVudFZOb2Rl
CisgICAgICAgICAgICAgICAgLy8gd2UgY2FuIG9wdGltaXNlIHRoaXMgaW4gdGhlIGZ1dHVyZSwg
YnV0IHRoaXMgZ2V0cyB1cyBvdXQgb2YgYSBsb3Qgb2YgaXNzdWVzCisgICAgICAgICAgICAgICAg
aW5wdXQucGFyZW50Vk5vZGUgPSB2Tm9kZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gaW5wdXQ7CisgICAgfQorICAgIGZ1bmN0aW9uIHNldFRleHRDb250ZW50KGRv
bSwgdGV4dCkgeworICAgICAgICBpZiAodGV4dCAhPT0gJycpIHsKKyAgICAgICAgICAgIGRvbS50
ZXh0Q29udGVudCA9IHRleHQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICBkb20uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJycpKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICBmdW5jdGlvbiB1cGRhdGVUZXh0Q29udGVudChkb20sIHRleHQpIHsKKyAg
ICAgICAgZG9tLmZpcnN0Q2hpbGQubm9kZVZhbHVlID0gdGV4dDsKKyAgICB9CisgICAgZnVuY3Rp
b24gYXBwZW5kQ2hpbGQocGFyZW50RG9tLCBkb20pIHsKKyAgICAgICAgcGFyZW50RG9tLmFwcGVu
ZENoaWxkKGRvbSk7CisgICAgfQorICAgIGZ1bmN0aW9uIGluc2VydE9yQXBwZW5kKHBhcmVudERv
bSwgbmV3Tm9kZSwgbmV4dE5vZGUpIHsKKyAgICAgICAgaWYgKGlzTnVsbE9yVW5kZWYobmV4dE5v
ZGUpKSB7CisgICAgICAgICAgICBhcHBlbmRDaGlsZChwYXJlbnREb20sIG5ld05vZGUpOworICAg
ICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcGFyZW50RG9tLmluc2VydEJlZm9y
ZShuZXdOb2RlLCBuZXh0Tm9kZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZnVuY3Rpb24gZG9j
dW1lbnRDcmVhdGVFbGVtZW50KHRhZywgaXNTVkcpIHsKKyAgICAgICAgaWYgKGlzU1ZHID09PSB0
cnVlKSB7CisgICAgICAgICAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHN2Z05T
LCB0YWcpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBmdW5jdGlv
biByZXBsYWNlV2l0aE5ld05vZGUobGFzdE5vZGUsIG5leHROb2RlLCBwYXJlbnREb20sIGxpZmVj
eWNsZSwgY29udGV4dCwgaXNTVkcsIGlzUmVjeWNsaW5nKSB7CisgICAgICAgIHVubW91bnQobGFz
dE5vZGUsIG51bGwsIGxpZmVjeWNsZSwgZmFsc2UsIGZhbHNlLCBpc1JlY3ljbGluZyk7CisgICAg
ICAgIHZhciBkb20gPSBtb3VudChuZXh0Tm9kZSwgbnVsbCwgbGlmZWN5Y2xlLCBjb250ZXh0LCBp
c1NWRyk7CisgICAgICAgIG5leHROb2RlLmRvbSA9IGRvbTsKKyAgICAgICAgcmVwbGFjZUNoaWxk
KHBhcmVudERvbSwgZG9tLCBsYXN0Tm9kZS5kb20pOworICAgIH0KKyAgICBmdW5jdGlvbiByZXBs
YWNlQ2hpbGQocGFyZW50RG9tLCBuZXh0RG9tLCBsYXN0RG9tKSB7CisgICAgICAgIGlmICghcGFy
ZW50RG9tKSB7CisgICAgICAgICAgICBwYXJlbnREb20gPSBsYXN0RG9tLnBhcmVudE5vZGU7Cisg
ICAgICAgIH0KKyAgICAgICAgcGFyZW50RG9tLnJlcGxhY2VDaGlsZChuZXh0RG9tLCBsYXN0RG9t
KTsKKyAgICB9CisgICAgZnVuY3Rpb24gcmVtb3ZlQ2hpbGQocGFyZW50RG9tLCBkb20pIHsKKyAg
ICAgICAgcGFyZW50RG9tLnJlbW92ZUNoaWxkKGRvbSk7CisgICAgfQorICAgIGZ1bmN0aW9uIHJl
bW92ZUFsbENoaWxkcmVuKGRvbSwgY2hpbGRyZW4sIGxpZmVjeWNsZSwgc2hhbGxvd1VubW91bnQs
IGlzUmVjeWNsaW5nKSB7CisgICAgICAgIGRvbS50ZXh0Q29udGVudCA9ICcnOworICAgICAgICBp
ZiAoIWxpZmVjeWNsZS5mYXN0VW5tb3VudCkgeworICAgICAgICAgICAgcmVtb3ZlQ2hpbGRyZW4o
bnVsbCwgY2hpbGRyZW4sIGxpZmVjeWNsZSwgc2hhbGxvd1VubW91bnQsIGlzUmVjeWNsaW5nKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICBmdW5jdGlvbiByZW1vdmVDaGlsZHJlbihkb20sIGNoaWxk
cmVuLCBsaWZlY3ljbGUsIHNoYWxsb3dVbm1vdW50LCBpc1JlY3ljbGluZykgeworICAgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB2
YXIgY2hpbGQgPSBjaGlsZHJlbltpXTsKKyAgICAgICAgICAgIGlmICghaXNJbnZhbGlkKGNoaWxk
KSkgeworICAgICAgICAgICAgICAgIHVubW91bnQoY2hpbGQsIGRvbSwgbGlmZWN5Y2xlLCB0cnVl
LCBzaGFsbG93VW5tb3VudCwgaXNSZWN5Y2xpbmcpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorICAgIGZ1bmN0aW9uIGlzS2V5ZWQobGFzdENoaWxkcmVuLCBuZXh0Q2hpbGRyZW4p
IHsKKyAgICAgICAgcmV0dXJuIG5leHRDaGlsZHJlbi5sZW5ndGggJiYgIWlzTnVsbE9yVW5kZWYo
bmV4dENoaWxkcmVuWzBdKSAmJiAhaXNOdWxsT3JVbmRlZihuZXh0Q2hpbGRyZW5bMF0ua2V5KQor
ICAgICAgICAgICAgJiYgbGFzdENoaWxkcmVuLmxlbmd0aCAmJiAhaXNOdWxsT3JVbmRlZihsYXN0
Q2hpbGRyZW5bMF0pICYmICFpc051bGxPclVuZGVmKGxhc3RDaGlsZHJlblswXS5rZXkpOworICAg
IH0KKworICAgIGZ1bmN0aW9uIG5vcm1hbGlzZUNoaWxkTm9kZXMoZG9tKSB7CisgICAgICAgIHZh
ciByYXdDaGlsZE5vZGVzID0gZG9tLmNoaWxkTm9kZXM7CisgICAgICAgIHZhciBsZW5ndGggPSBy
YXdDaGlsZE5vZGVzLmxlbmd0aDsKKyAgICAgICAgdmFyIGkgPSAwOworICAgICAgICB3aGlsZSAo
aSA8IGxlbmd0aCkgeworICAgICAgICAgICAgdmFyIHJhd0NoaWxkID0gcmF3Q2hpbGROb2Rlc1tp
XTsKKyAgICAgICAgICAgIGlmIChyYXdDaGlsZC5ub2RlVHlwZSA9PT0gOCkgeworICAgICAgICAg
ICAgICAgIGlmIChyYXdDaGlsZC5kYXRhID09PSAnIScpIHsKKyAgICAgICAgICAgICAgICAgICAg
dmFyIHBsYWNlaG9sZGVyID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJycpOworICAgICAgICAg
ICAgICAgICAgICBkb20ucmVwbGFjZUNoaWxkKHBsYWNlaG9sZGVyLCByYXdDaGlsZCk7CisgICAg
ICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGRvbS5yZW1vdmVDaGlsZChyYXdDaGlsZCk7Cisg
ICAgICAgICAgICAgICAgICAgIGxlbmd0aC0tOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBmdW5jdGlvbiBoeWRyYXRlQ29tcG9uZW50KHZO
b2RlLCBkb20sIGxpZmVjeWNsZSwgY29udGV4dCwgaXNTVkcsIGlzQ2xhc3MpIHsKKyAgICAgICAg
dmFyIHR5cGUgPSB2Tm9kZS50eXBlOworICAgICAgICB2YXIgcHJvcHMgPSB2Tm9kZS5wcm9wcyB8
fCB7fTsKKyAgICAgICAgdmFyIHJlZiA9IHZOb2RlLnJlZjsKKyAgICAgICAgdk5vZGUuZG9tID0g
ZG9tOworICAgICAgICBpZiAoaXNDbGFzcykgeworICAgICAgICAgICAgdmFyIF9pc1NWRyA9IGRv
bS5uYW1lc3BhY2VVUkkgPT09IHN2Z05TOworICAgICAgICAgICAgdmFyIGRlZmF1bHRQcm9wcyA9
IHR5cGUuZGVmYXVsdFByb3BzOworICAgICAgICAgICAgbGlmZWN5Y2xlLmZhc3RVbm1vdW50ID0g
ZmFsc2U7CisgICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGRlZmF1bHRQcm9wcykpIHsKKyAg
ICAgICAgICAgICAgICBjb3B5UHJvcHNUbyhkZWZhdWx0UHJvcHMsIHByb3BzKTsKKyAgICAgICAg
ICAgICAgICB2Tm9kZS5wcm9wcyA9IHByb3BzOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
dmFyIGluc3RhbmNlID0gY3JlYXRlU3RhdGVmdWxDb21wb25lbnRJbnN0YW5jZSh2Tm9kZSwgdHlw
ZSwgcHJvcHMsIGNvbnRleHQsIF9pc1NWRywgZGV2VG9vbHNTdGF0dXMpOworICAgICAgICAgICAg
dmFyIGlucHV0ID0gaW5zdGFuY2UuX2xhc3RJbnB1dDsKKyAgICAgICAgICAgIHZhciBmYXN0VW5t
b3VudCA9IGxpZmVjeWNsZS5mYXN0VW5tb3VudDsKKyAgICAgICAgICAgIC8vIHdlIHN0b3JlIHRo
ZSBmYXN0VW5tb3VudCB2YWx1ZSwgYnV0IHdlIHNldCBpdCBiYWNrIHRvIHRydWUgb24gdGhlIGxp
ZmVjeWNsZQorICAgICAgICAgICAgLy8gd2UgZG8gdGhpcyBzbyB3ZSBjYW4gZGV0ZXJtaW5lIGlm
IHRoZSBjb21wb25lbnQgcmVuZGVyIGhhcyBhIGZhc3RVbm1vdW50IG9yIG5vdCAgICAgIAorICAg
ICAgICAgICAgbGlmZWN5Y2xlLmZhc3RVbm1vdW50ID0gdHJ1ZTsKKyAgICAgICAgICAgIGluc3Rh
bmNlLl92Q29tcG9uZW50ID0gdk5vZGU7CisgICAgICAgICAgICBpbnN0YW5jZS5fdk5vZGUgPSB2
Tm9kZTsKKyAgICAgICAgICAgIGh5ZHJhdGUoaW5wdXQsIGRvbSwgbGlmZWN5Y2xlLCBpbnN0YW5j
ZS5fY2hpbGRDb250ZXh0LCBfaXNTVkcpOworICAgICAgICAgICAgdmFyIHN1YkxpZmVjeWNsZSA9
IGluc3RhbmNlLl9saWZlY3ljbGUgPSBuZXcgTGlmZWN5Y2xlKCk7CisgICAgICAgICAgICBzdWJM
aWZlY3ljbGUuZmFzdFVubW91bnQgPSBsaWZlY3ljbGUuZmFzdFVubW91bnQ7CisgICAgICAgICAg
ICAvLyB3ZSB0aGVuIHNldCB0aGUgbGlmZWN5Y2xlIGZhc3RVbm1vdW50IHZhbHVlIGJhY2sgdG8g
d2hhdCBpdCB3YXMgYmVmb3JlIHRoZSBtb3VudAorICAgICAgICAgICAgbGlmZWN5Y2xlLmZhc3RV
bm1vdW50ID0gZmFzdFVubW91bnQ7CisgICAgICAgICAgICBtb3VudFN0YXRlZnVsQ29tcG9uZW50
Q2FsbGJhY2tzKHJlZiwgaW5zdGFuY2UsIGxpZmVjeWNsZSk7CisgICAgICAgICAgICBmaW5kRE9N
Tm9kZUVuYWJsZWQgJiYgY29tcG9uZW50VG9ET01Ob2RlTWFwLnNldChpbnN0YW5jZSwgZG9tKTsK
KyAgICAgICAgICAgIHZOb2RlLmNoaWxkcmVuID0gaW5zdGFuY2U7CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICB2YXIgaW5wdXQkMSA9IGNyZWF0ZVN0YXRlbGVzc0NvbXBv
bmVudElucHV0KHZOb2RlLCB0eXBlLCBwcm9wcywgY29udGV4dCk7CisgICAgICAgICAgICBoeWRy
YXRlKGlucHV0JDEsIGRvbSwgbGlmZWN5Y2xlLCBjb250ZXh0LCBpc1NWRyk7CisgICAgICAgICAg
ICB2Tm9kZS5jaGlsZHJlbiA9IGlucHV0JDE7CisgICAgICAgICAgICB2Tm9kZS5kb20gPSBpbnB1
dCQxLmRvbTsKKyAgICAgICAgICAgIG1vdW50U3RhdGVsZXNzQ29tcG9uZW50Q2FsbGJhY2tzKHJl
ZiwgZG9tLCBsaWZlY3ljbGUpOworICAgICAgICB9CisgICAgfQorICAgIGZ1bmN0aW9uIGh5ZHJh
dGVFbGVtZW50KHZOb2RlLCBkb20sIGxpZmVjeWNsZSwgY29udGV4dCwgaXNTVkcpIHsKKyAgICAg
ICAgdmFyIHRhZyA9IHZOb2RlLnR5cGU7CisgICAgICAgIHZhciBjaGlsZHJlbiA9IHZOb2RlLmNo
aWxkcmVuOworICAgICAgICB2YXIgcHJvcHMgPSB2Tm9kZS5wcm9wczsKKyAgICAgICAgdmFyIGV2
ZW50cyA9IHZOb2RlLmV2ZW50czsKKyAgICAgICAgdmFyIGZsYWdzID0gdk5vZGUuZmxhZ3M7Cisg
ICAgICAgIGlmIChpc1NWRyB8fCAoZmxhZ3MgJiAxMjggLyogU3ZnRWxlbWVudCAqLykpIHsKKyAg
ICAgICAgICAgIGlzU1ZHID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZG9tLm5vZGVU
eXBlICE9PSAxIHx8IGRvbS50YWdOYW1lLnRvTG93ZXJDYXNlKCkgIT09IHRhZykgeworICAgICAg
ICAgICAgdmFyIG5ld0RvbSA9IG1vdW50RWxlbWVudCh2Tm9kZSwgbnVsbCwgbGlmZWN5Y2xlLCBj
b250ZXh0LCBpc1NWRyk7CisgICAgICAgICAgICB2Tm9kZS5kb20gPSBuZXdEb207CisgICAgICAg
ICAgICByZXBsYWNlQ2hpbGQoZG9tLnBhcmVudE5vZGUsIG5ld0RvbSwgZG9tKTsKKyAgICAgICAg
fQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHZOb2RlLmRvbSA9IGRvbTsKKyAgICAgICAg
ICAgIGlmIChjaGlsZHJlbikgeworICAgICAgICAgICAgICAgIGh5ZHJhdGVDaGlsZHJlbihjaGls
ZHJlbiwgZG9tLCBsaWZlY3ljbGUsIGNvbnRleHQsIGlzU1ZHKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmICghKGZsYWdzICYgMiAvKiBIdG1sRWxlbWVudCAqLykpIHsKKyAgICAgICAg
ICAgICAgICBwcm9jZXNzRWxlbWVudChmbGFncywgdk5vZGUsIGRvbSk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBmb3IgKHZhciBwcm9wIGluIHByb3BzKSB7CisgICAgICAgICAgICAgICAg
cGF0Y2hQcm9wKHByb3AsIG51bGwsIHByb3BzW3Byb3BdLCBkb20sIGlzU1ZHLCBsaWZlY3ljbGUp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yICh2YXIgbmFtZSBpbiBldmVudHMpIHsK
KyAgICAgICAgICAgICAgICBwYXRjaEV2ZW50KG5hbWUsIG51bGwsIGV2ZW50c1tuYW1lXSwgZG9t
LCBsaWZlY3ljbGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGZ1bmN0
aW9uIGh5ZHJhdGVDaGlsZHJlbihjaGlsZHJlbiwgZG9tLCBsaWZlY3ljbGUsIGNvbnRleHQsIGlz
U1ZHKSB7CisgICAgICAgIG5vcm1hbGlzZUNoaWxkTm9kZXMoZG9tKTsKKyAgICAgICAgdmFyIGRv
bU5vZGVzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZG9tLmNoaWxkTm9kZXMpOworICAg
ICAgICB2YXIgY2hpbGROb2RlSW5kZXggPSAwOworICAgICAgICBpZiAoaXNBcnJheShjaGlsZHJl
bikpIHsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBp
KyspIHsKKyAgICAgICAgICAgICAgICB2YXIgY2hpbGQgPSBjaGlsZHJlbltpXTsKKyAgICAgICAg
ICAgICAgICBpZiAoaXNPYmplY3QoY2hpbGQpICYmICFpc051bGwoY2hpbGQpKSB7CisgICAgICAg
ICAgICAgICAgICAgIGh5ZHJhdGUoY2hpbGQsIGRvbU5vZGVzW2NoaWxkTm9kZUluZGV4KytdLCBs
aWZlY3ljbGUsIGNvbnRleHQsIGlzU1ZHKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaXNPYmplY3QoY2hpbGRyZW4pKSB7Cisg
ICAgICAgICAgICBoeWRyYXRlKGNoaWxkcmVuLCBkb20uZmlyc3RDaGlsZCwgbGlmZWN5Y2xlLCBj
b250ZXh0LCBpc1NWRyk7CisgICAgICAgIH0KKyAgICB9CisgICAgZnVuY3Rpb24gaHlkcmF0ZVRl
eHQodk5vZGUsIGRvbSkgeworICAgICAgICBpZiAoZG9tLm5vZGVUeXBlID09PSAzKSB7CisgICAg
ICAgICAgICB2YXIgbmV3RG9tID0gbW91bnRUZXh0KHZOb2RlLCBudWxsKTsKKyAgICAgICAgICAg
IHZOb2RlLmRvbSA9IG5ld0RvbTsKKyAgICAgICAgICAgIHJlcGxhY2VDaGlsZChkb20ucGFyZW50
Tm9kZSwgbmV3RG9tLCBkb20pOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgdk5vZGUuZG9tID0gZG9tOworICAgICAgICB9CisgICAgfQorICAgIGZ1bmN0aW9uIGh5ZHJh
dGVWb2lkKHZOb2RlLCBkb20pIHsKKyAgICAgICAgdk5vZGUuZG9tID0gZG9tOworICAgIH0KKyAg
ICBmdW5jdGlvbiBoeWRyYXRlKHZOb2RlLCBkb20sIGxpZmVjeWNsZSwgY29udGV4dCwgaXNTVkcp
IHsKKyAgICAgICAgaWYgKGZhbHNlKSB7CisgICAgICAgICAgICBpZiAoaXNJbnZhbGlkKGRvbSkp
IHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKCJmYWlsZWQgdG8gaHlkcmF0ZS4gVGhlIHNl
cnZlci1zaWRlIHJlbmRlciBkb2Vzbid0IG1hdGNoIGNsaWVudCBzaWRlLiIpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIHZhciBmbGFncyA9IHZOb2RlLmZsYWdzOworICAgICAg
ICBpZiAoZmxhZ3MgJiAyOCAvKiBDb21wb25lbnQgKi8pIHsKKyAgICAgICAgICAgIHJldHVybiBo
eWRyYXRlQ29tcG9uZW50KHZOb2RlLCBkb20sIGxpZmVjeWNsZSwgY29udGV4dCwgaXNTVkcsIGZs
YWdzICYgNCAvKiBDb21wb25lbnRDbGFzcyAqLyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBp
ZiAoZmxhZ3MgJiAzOTcwIC8qIEVsZW1lbnQgKi8pIHsKKyAgICAgICAgICAgIHJldHVybiBoeWRy
YXRlRWxlbWVudCh2Tm9kZSwgZG9tLCBsaWZlY3ljbGUsIGNvbnRleHQsIGlzU1ZHKTsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlIGlmIChmbGFncyAmIDEgLyogVGV4dCAqLykgeworICAgICAgICAg
ICAgcmV0dXJuIGh5ZHJhdGVUZXh0KHZOb2RlLCBkb20pOworICAgICAgICB9CisgICAgICAgIGVs
c2UgaWYgKGZsYWdzICYgNDA5NiAvKiBWb2lkICovKSB7CisgICAgICAgICAgICByZXR1cm4gaHlk
cmF0ZVZvaWQodk5vZGUsIGRvbSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICBpZiAoZmFsc2UpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKCgiaHlkcmF0ZSgp
IGV4cGVjdHMgYSB2YWxpZCBWTm9kZSwgaW5zdGVhZCBpdCByZWNlaXZlZCBhbiBvYmplY3Qgd2l0
aCB0aGUgdHlwZSBcIiIgKyAodHlwZW9mIHZOb2RlKSArICJcIi4iKSk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICB0aHJvd0Vycm9yKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZnVuY3Rp
b24gaHlkcmF0ZVJvb3QoaW5wdXQsIHBhcmVudERvbSwgbGlmZWN5Y2xlKSB7CisgICAgICAgIGlm
IChwYXJlbnREb20gJiYgcGFyZW50RG9tLm5vZGVUeXBlID09PSAxICYmIHBhcmVudERvbS5maXJz
dENoaWxkKSB7CisgICAgICAgICAgICBoeWRyYXRlKGlucHV0LCBwYXJlbnREb20uZmlyc3RDaGls
ZCwgbGlmZWN5Y2xlLCB7fSwgZmFsc2UpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIHJhdGhlciB0aGFu
IHVzZSBhIE1hcCwgbGlrZSB3ZSBkaWQgYmVmb3JlLCB3ZSBjYW4gdXNlIGFuIGFycmF5IGhlcmUK
KyAgICAvLyBnaXZlbiB0aGVyZSBzaG91bGRuJ3QgYmUgVEhBVCBtYW55IHJvb3RzIG9uIHRoZSBw
YWdlLCB0aGUgZGlmZmVyZW5jZQorICAgIC8vIGluIHBlcmZvcm1hbmNlIGlzIGh1Z2U6IGh0dHBz
Oi8vZXNiZW5jaC5jb20vYmVuY2gvNTgwMmE2OTEzMzBhYjA5OTAwYTFhMmRhCisgICAgdmFyIHJv
b3RzID0gW107CisgICAgdmFyIGNvbXBvbmVudFRvRE9NTm9kZU1hcCA9IG5ldyBNYXAoKTsKKyAg
ICB2YXIgZmluZERPTU5vZGVFbmFibGVkID0gZmFsc2U7CisgICAgZnVuY3Rpb24gZW5hYmxlRmlu
ZERPTU5vZGUoKSB7CisgICAgICAgIGZpbmRET01Ob2RlRW5hYmxlZCA9IHRydWU7CisgICAgfQor
ICAgIGZ1bmN0aW9uIGZpbmRET01Ob2RlKHJlZikgeworICAgICAgICBpZiAoIWZpbmRET01Ob2Rl
RW5hYmxlZCkgeworICAgICAgICAgICAgaWYgKGZhbHNlKSB7CisgICAgICAgICAgICAgICAgdGhy
b3dFcnJvcignZmluZERPTU5vZGUoKSBoYXMgYmVlbiBkaXNhYmxlZCwgdXNlIGVuYWJsZUZpbmRE
T01Ob2RlKCkgZW5hYmxlZCBmaW5kRE9NTm9kZSgpLiBXYXJuaW5nIHRoaXMgY2FuIHNpZ25pZmlj
YW50bHkgaW1wYWN0IHBlcmZvcm1hbmNlIScpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
dGhyb3dFcnJvcigpOworICAgICAgICB9CisgICAgICAgIHZhciBkb20gPSByZWYgJiYgcmVmLm5v
ZGVUeXBlID8gcmVmIDogbnVsbDsKKyAgICAgICAgcmV0dXJuIGNvbXBvbmVudFRvRE9NTm9kZU1h
cC5nZXQocmVmKSB8fCBkb207CisgICAgfQorICAgIGZ1bmN0aW9uIGdldFJvb3QoZG9tKSB7Cisg
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm9vdHMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAg
ICAgIHZhciByb290ID0gcm9vdHNbaV07CisgICAgICAgICAgICBpZiAocm9vdC5kb20gPT09IGRv
bSkgeworICAgICAgICAgICAgICAgIHJldHVybiByb290OworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgICBmdW5jdGlvbiBzZXRSb290KGRv
bSwgaW5wdXQsIGxpZmVjeWNsZSkgeworICAgICAgICByb290cy5wdXNoKHsKKyAgICAgICAgICAg
IGRvbTogZG9tLAorICAgICAgICAgICAgaW5wdXQ6IGlucHV0LAorICAgICAgICAgICAgbGlmZWN5
Y2xlOiBsaWZlY3ljbGUKKyAgICAgICAgfSk7CisgICAgfQorICAgIGZ1bmN0aW9uIHJlbW92ZVJv
b3Qocm9vdCkgeworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvb3RzLmxlbmd0aDsgaSsr
KSB7CisgICAgICAgICAgICBpZiAocm9vdHNbaV0gPT09IHJvb3QpIHsKKyAgICAgICAgICAgICAg
ICByb290cy5zcGxpY2UoaSwgMSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorICAgIHZhciBkb2N1bWVudEJvZHkgPSBpc0Jyb3dzZXIg
PyBkb2N1bWVudC5ib2R5IDogbnVsbDsKKyAgICBmdW5jdGlvbiByZW5kZXIoaW5wdXQsIHBhcmVu
dERvbSkgeworICAgICAgICBpZiAoZG9jdW1lbnRCb2R5ID09PSBwYXJlbnREb20pIHsKKyAgICAg
ICAgICAgIGlmIChmYWxzZSkgeworICAgICAgICAgICAgICAgIHRocm93RXJyb3IoJ3lvdSBjYW5u
b3QgcmVuZGVyKCkgdG8gdGhlICJkb2N1bWVudC5ib2R5Ii4gVXNlIGFuIGVtcHR5IGVsZW1lbnQg
YXMgYSBjb250YWluZXIgaW5zdGVhZC4nKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRo
cm93RXJyb3IoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaW5wdXQgPT09IE5PX09QKSB7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdmFyIHJvb3QgPSBnZXRSb290
KHBhcmVudERvbSk7CisgICAgICAgIGlmIChpc051bGwocm9vdCkpIHsKKyAgICAgICAgICAgIHZh
ciBsaWZlY3ljbGUgPSBuZXcgTGlmZWN5Y2xlKCk7CisgICAgICAgICAgICBpZiAoIWlzSW52YWxp
ZChpbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoaW5wdXQuZG9tKSB7CisgICAgICAgICAg
ICAgICAgICAgIGlucHV0ID0gY2xvbmVWTm9kZShpbnB1dCk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGlmICghaHlkcmF0ZVJvb3QoaW5wdXQsIHBhcmVudERvbSwgbGlmZWN5
Y2xlKSkgeworICAgICAgICAgICAgICAgICAgICBtb3VudChpbnB1dCwgcGFyZW50RG9tLCBsaWZl
Y3ljbGUsIHt9LCBmYWxzZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGxp
ZmVjeWNsZS50cmlnZ2VyKCk7CisgICAgICAgICAgICAgICAgc2V0Um9vdChwYXJlbnREb20sIGlu
cHV0LCBsaWZlY3ljbGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgdmFyIGxpZmVjeWNsZSQxID0gcm9vdC5saWZlY3ljbGU7CisgICAgICAg
ICAgICBsaWZlY3ljbGUkMS5saXN0ZW5lcnMgPSBbXTsKKyAgICAgICAgICAgIGlmIChpc051bGxP
clVuZGVmKGlucHV0KSkgeworICAgICAgICAgICAgICAgIHVubW91bnQocm9vdC5pbnB1dCwgcGFy
ZW50RG9tLCBsaWZlY3ljbGUkMSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7CisgICAgICAgICAgICAg
ICAgcmVtb3ZlUm9vdChyb290KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgICAgIGlmIChpbnB1dC5kb20pIHsKKyAgICAgICAgICAgICAgICAgICAgaW5w
dXQgPSBjbG9uZVZOb2RlKGlucHV0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgcGF0Y2gocm9vdC5pbnB1dCwgaW5wdXQsIHBhcmVudERvbSwgbGlmZWN5Y2xlJDEsIHt9LCBm
YWxzZSwgZmFsc2UpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbGlmZWN5Y2xlJDEudHJp
Z2dlcigpOworICAgICAgICAgICAgcm9vdC5pbnB1dCA9IGlucHV0OworICAgICAgICB9CisgICAg
ICAgIGlmIChkZXZUb29sc1N0YXR1cy5jb25uZWN0ZWQpIHsKKyAgICAgICAgICAgIHNlbmRSb290
cyh3aW5kb3cpOworICAgICAgICB9CisgICAgfQorICAgIGZ1bmN0aW9uIGNyZWF0ZVJlbmRlcmVy
KCkgeworICAgICAgICB2YXIgcGFyZW50RG9tOworICAgICAgICByZXR1cm4gZnVuY3Rpb24gcmVu
ZGVyZXIobGFzdElucHV0LCBuZXh0SW5wdXQpIHsKKyAgICAgICAgICAgIGlmICghcGFyZW50RG9t
KSB7CisgICAgICAgICAgICAgICAgcGFyZW50RG9tID0gbGFzdElucHV0OworICAgICAgICAgICAg
fQorICAgICAgICAgICAgcmVuZGVyKG5leHRJbnB1dCwgcGFyZW50RG9tKTsKKyAgICAgICAgfTsK
KyAgICB9CisKKyAgICBmdW5jdGlvbiBsaW5rRXZlbnQoZGF0YSwgZXZlbnQpIHsKKyAgICAgICAg
cmV0dXJuIHsgZGF0YTogZGF0YSwgZXZlbnQ6IGV2ZW50IH07CisgICAgfQorCisgICAgaWYgKGlz
QnJvd3NlcikgeworICAgICAgICB3aW5kb3cucHJvY2VzcyA9IHsKKyAgICAgICAgICAgIGVudjog
eworICAgICAgICAgICAgICAgIE5PREVfRU5WOiAnZGV2ZWxvcG1lbnQnCisgICAgICAgICAgICB9
CisgICAgICAgIH07CisgICAgICAgIGluaXREZXZUb29sc0hvb2tzKHdpbmRvdyk7CisgICAgfQor
CisgICAgaWYgKGZhbHNlKSB7CisgICAgICAgIHZhciB0ZXN0RnVuYyA9IGZ1bmN0aW9uIHRlc3RG
bigpIHt9OworICAgICAgICB3YXJuaW5nKAorICAgICAgICAgICAgKHRlc3RGdW5jLm5hbWUgfHwg
dGVzdEZ1bmMudG9TdHJpbmcoKSkuaW5kZXhPZigndGVzdEZuJykgIT09IC0xLAorICAgICAgICAg
ICAgJ0l0IGxvb2tzIGxpa2UgeW91XCdyZSB1c2luZyBhIG1pbmlmaWVkIGNvcHkgb2YgdGhlIGRl
dmVsb3BtZW50IGJ1aWxkICcgKworICAgICAgICAgICAgJ29mIEluZmVybm8uIFdoZW4gZGVwbG95
aW5nIEluZmVybm8gYXBwcyB0byBwcm9kdWN0aW9uLCBtYWtlIHN1cmUgdG8gdXNlICcgKworICAg
ICAgICAgICAgJ3RoZSBwcm9kdWN0aW9uIGJ1aWxkIHdoaWNoIHNraXBzIGRldmVsb3BtZW50IHdh
cm5pbmdzIGFuZCBpcyBmYXN0ZXIuICcgKworICAgICAgICAgICAgJ1NlZSBodHRwOi8vaW5mZXJu
b2pzLm9yZyBmb3IgbW9yZSBkZXRhaWxzLicKKyAgICAgICAgKTsKKyAgICB9CisKKyAgICAvLyB3
ZSBkdXBsaWNhdGUgaXQgc28gaXQgcGxheXMgbmljZWx5IHdpdGggZGlmZmVyZW50IG1vZHVsZSBs
b2FkaW5nIHN5c3RlbXMKKyAgICB2YXIgaW5kZXggPSB7CisgICAgICAgIGxpbmtFdmVudDogbGlu
a0V2ZW50LAorICAgICAgICAvLyBjb3JlIHNoYXBlcworICAgICAgICBjcmVhdGVWTm9kZTogY3Jl
YXRlVk5vZGUsCisKKyAgICAgICAgLy8gY2xvbmluZworICAgICAgICBjbG9uZVZOb2RlOiBjbG9u
ZVZOb2RlLAorCisgICAgICAgIC8vIHVzZWQgdG8gc2hhcmVkIGNvbW1vbiBpdGVtcyBiZXR3ZWVu
IEluZmVybm8gbGlicworICAgICAgICBOT19PUDogTk9fT1AsCisgICAgICAgIEVNUFRZX09CSjog
RU1QVFlfT0JKLAorCisgICAgICAgIC8vRE9NCisgICAgICAgIHJlbmRlcjogcmVuZGVyLAorICAg
ICAgICBmaW5kRE9NTm9kZTogZmluZERPTU5vZGUsCisgICAgICAgIGNyZWF0ZVJlbmRlcmVyOiBj
cmVhdGVSZW5kZXJlciwKKyAgICAgICAgZGlzYWJsZVJlY3ljbGluZzogZGlzYWJsZVJlY3ljbGlu
ZywKKyAgICAgICAgZW5hYmxlRmluZERPTU5vZGU6IGVuYWJsZUZpbmRET01Ob2RlCisgICAgfTsK
KworICAgIGV4cG9ydHNbJ2RlZmF1bHQnXSA9IGluZGV4OworICAgIGV4cG9ydHMubGlua0V2ZW50
ID0gbGlua0V2ZW50OworICAgIGV4cG9ydHMuY3JlYXRlVk5vZGUgPSBjcmVhdGVWTm9kZTsKKyAg
ICBleHBvcnRzLmNsb25lVk5vZGUgPSBjbG9uZVZOb2RlOworICAgIGV4cG9ydHMuTk9fT1AgPSBO
T19PUDsKKyAgICBleHBvcnRzLkVNUFRZX09CSiA9IEVNUFRZX09CSjsKKyAgICBleHBvcnRzLnJl
bmRlciA9IHJlbmRlcjsKKyAgICBleHBvcnRzLmZpbmRET01Ob2RlID0gZmluZERPTU5vZGU7Cisg
ICAgZXhwb3J0cy5jcmVhdGVSZW5kZXJlciA9IGNyZWF0ZVJlbmRlcmVyOworICAgIGV4cG9ydHMu
ZGlzYWJsZVJlY3ljbGluZyA9IGRpc2FibGVSZWN5Y2xpbmc7CisgICAgZXhwb3J0cy5lbmFibGVG
aW5kRE9NTm9kZSA9IGVuYWJsZUZpbmRET01Ob2RlOworCisgICAgT2JqZWN0LmRlZmluZVByb3Bl
cnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTsKKworICAgIH0pKSk7
CisKKworLyoqKi8gfSwKKy8qIDMgKi8KKy8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywg
X193ZWJwYWNrX3JlcXVpcmVfXykgeworCisgICAgbW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKDQpOworCisKKy8qKiovIH0sCisvKiA0ICovCisvKioqLyBmdW5jdGlvbihtb2R1
bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworICAgIC8qIQorICAgICAqIGlu
ZmVybm8tY29tcG9uZW50IHYxLjAuMC1iZXRhMzIKKyAgICAgKiAoYykgMjAxNiBEb21pbmljIEdh
bm5hd2F5CisgICAgICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLgorICAgICAqLwor
ICAgIChmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7CisgICAgICAgICB0cnVlID8gbW9kdWxl
LmV4cG9ydHMgPSBmYWN0b3J5KF9fd2VicGFja19yZXF1aXJlX18oMikpIDoKKyAgICAgICAgdHlw
ZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnaW5mZXJu
byddLCBmYWN0b3J5KSA6CisgICAgICAgIChnbG9iYWwuSW5mZXJubyA9IGdsb2JhbC5JbmZlcm5v
IHx8IHt9LCBnbG9iYWwuSW5mZXJuby5Db21wb25lbnQgPSBmYWN0b3J5KGdsb2JhbC5JbmZlcm5v
KSk7CisgICAgfSh0aGlzLCAoZnVuY3Rpb24gKGluZmVybm8pIHsgJ3VzZSBzdHJpY3QnOworCisg
ICAgdmFyIEVSUk9SX01TRyA9ICdhIHJ1bnRpbWUgZXJyb3Igb2NjdXJlZCEgVXNlIEluZmVybm8g
aW4gZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQgdG8gZmluZCB0aGUgZXJyb3IuJzsKKworCisgICAg
Ly8gdGhpcyBpcyBNVUNIIGZhc3RlciB0aGFuIC5jb25zdHJ1Y3RvciA9PT0gQXJyYXkgYW5kIGlu
c3RhbmNlb2YgQXJyYXkKKyAgICAvLyBpbiBOb2RlIDcgYW5kIHRoZSBsYXRlciB2ZXJzaW9ucyBv
ZiBWOCwgc2xvd2VyIGluIG9sZGVyIHZlcnNpb25zIHRob3VnaAorICAgIHZhciBpc0FycmF5ID0g
QXJyYXkuaXNBcnJheTsKKworCisgICAgZnVuY3Rpb24gaXNOdWxsT3JVbmRlZihvYmopIHsKKyAg
ICAgICAgcmV0dXJuIGlzVW5kZWZpbmVkKG9iaikgfHwgaXNOdWxsKG9iaik7CisgICAgfQorICAg
IGZ1bmN0aW9uIGlzSW52YWxpZChvYmopIHsKKyAgICAgICAgcmV0dXJuIGlzTnVsbChvYmopIHx8
IG9iaiA9PT0gZmFsc2UgfHwgaXNUcnVlKG9iaikgfHwgaXNVbmRlZmluZWQob2JqKTsKKyAgICB9
CisgICAgZnVuY3Rpb24gaXNGdW5jdGlvbihvYmopIHsKKyAgICAgICAgcmV0dXJuIHR5cGVvZiBv
YmogPT09ICdmdW5jdGlvbic7CisgICAgfQorCisKKworICAgIGZ1bmN0aW9uIGlzTnVsbChvYmop
IHsKKyAgICAgICAgcmV0dXJuIG9iaiA9PT0gbnVsbDsKKyAgICB9CisgICAgZnVuY3Rpb24gaXNU
cnVlKG9iaikgeworICAgICAgICByZXR1cm4gb2JqID09PSB0cnVlOworICAgIH0KKyAgICBmdW5j
dGlvbiBpc1VuZGVmaW5lZChvYmopIHsKKyAgICAgICAgcmV0dXJuIG9iaiA9PT0gdW5kZWZpbmVk
OworICAgIH0KKworICAgIGZ1bmN0aW9uIHRocm93RXJyb3IobWVzc2FnZSkgeworICAgICAgICBp
ZiAoIW1lc3NhZ2UpIHsKKyAgICAgICAgICAgIG1lc3NhZ2UgPSBFUlJPUl9NU0c7CisgICAgICAg
IH0KKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCgiSW5mZXJubyBFcnJvcjogIiArIG1lc3NhZ2Up
KTsKKyAgICB9CisKKyAgICB2YXIgTGlmZWN5Y2xlID0gZnVuY3Rpb24gTGlmZWN5Y2xlKCkgewor
ICAgICAgICB0aGlzLmxpc3RlbmVycyA9IFtdOworICAgICAgICB0aGlzLmZhc3RVbm1vdW50ID0g
dHJ1ZTsKKyAgICB9OworICAgIExpZmVjeWNsZS5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBmdW5j
dGlvbiBhZGRMaXN0ZW5lciAoY2FsbGJhY2spIHsKKyAgICAgICAgdGhpcy5saXN0ZW5lcnMucHVz
aChjYWxsYmFjayk7CisgICAgfTsKKyAgICBMaWZlY3ljbGUucHJvdG90eXBlLnRyaWdnZXIgPSBm
dW5jdGlvbiB0cmlnZ2VyICgpIHsKKyAgICAgICAgICAgIHZhciB0aGlzJDEgPSB0aGlzOworCisg
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5saXN0ZW5lcnMubGVuZ3RoOyBpKyspIHsK
KyAgICAgICAgICAgIHRoaXMkMS5saXN0ZW5lcnNbaV0oKTsKKyAgICAgICAgfQorICAgIH07CisK
KyAgICB2YXIgbm9PcCA9IEVSUk9SX01TRzsKKyAgICBpZiAoZmFsc2UpIHsKKyAgICAgICAgbm9P
cCA9ICdJbmZlcm5vIEVycm9yOiBDYW4gb25seSB1cGRhdGUgYSBtb3VudGVkIG9yIG1vdW50aW5n
IGNvbXBvbmVudC4gVGhpcyB1c3VhbGx5IG1lYW5zIHlvdSBjYWxsZWQgc2V0U3RhdGUoKSBvciBm
b3JjZVVwZGF0ZSgpIG9uIGFuIHVubW91bnRlZCBjb21wb25lbnQuIFRoaXMgaXMgYSBuby1vcC4n
OworICAgIH0KKyAgICB2YXIgY29tcG9uZW50Q2FsbGJhY2tRdWV1ZSA9IG5ldyBNYXAoKTsKKyAg
ICAvLyB3aGVuIGEgY29tcG9uZW50cyByb290IFZOb2RlIGlzIGFsc28gYSBjb21wb25lbnQsIHdl
IGNhbiBydW4gaW50byBpc3N1ZXMKKyAgICAvLyB0aGlzIHdpbGwgcmVjdXJzaXZlbHkgbG9vayBm
b3Igdk5vZGUucGFyZW50Tm9kZSBpZiB0aGUgVk5vZGUgaXMgYSBjb21wb25lbnQKKyAgICBmdW5j
dGlvbiB1cGRhdGVQYXJlbnRDb21wb25lbnRWTm9kZXModk5vZGUsIGRvbSkgeworICAgICAgICBp
ZiAodk5vZGUuZmxhZ3MgJiAyOCAvKiBDb21wb25lbnQgKi8pIHsKKyAgICAgICAgICAgIHZhciBw
YXJlbnRWTm9kZSA9IHZOb2RlLnBhcmVudFZOb2RlOworICAgICAgICAgICAgaWYgKHBhcmVudFZO
b2RlKSB7CisgICAgICAgICAgICAgICAgcGFyZW50Vk5vZGUuZG9tID0gZG9tOworICAgICAgICAg
ICAgICAgIHVwZGF0ZVBhcmVudENvbXBvbmVudFZOb2RlcyhwYXJlbnRWTm9kZSwgZG9tKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAvLyB0aGlzIGlzIGluIHNoYXBlcyB0
b28sIGJ1dCB3ZSBkb24ndCB3YW50IHRvIGltcG9ydCBmcm9tIHNoYXBlcyBhcyBpdCB3aWxsIHB1
bGwgaW4gYSBkdXBsaWNhdGUgb2YgY3JlYXRlVk5vZGUKKyAgICBmdW5jdGlvbiBjcmVhdGVWb2lk
Vk5vZGUoKSB7CisgICAgICAgIHJldHVybiBpbmZlcm5vLmNyZWF0ZVZOb2RlKDQwOTYgLyogVm9p
ZCAqLyk7CisgICAgfQorICAgIGZ1bmN0aW9uIGFkZFRvUXVldWUoY29tcG9uZW50LCBmb3JjZSwg
Y2FsbGJhY2spIHsKKyAgICAgICAgLy8gVE9ETyB0aGlzIGZ1bmN0aW9uIG5lZWRzIHRvIGJlIHJl
dmlzZWQgYW5kIGltcHJvdmVkIG9uCisgICAgICAgIHZhciBxdWV1ZSA9IGNvbXBvbmVudENhbGxi
YWNrUXVldWUuZ2V0KGNvbXBvbmVudCk7CisgICAgICAgIGlmICghcXVldWUpIHsKKyAgICAgICAg
ICAgIHF1ZXVlID0gW107CisgICAgICAgICAgICBjb21wb25lbnRDYWxsYmFja1F1ZXVlLnNldChj
b21wb25lbnQsIHF1ZXVlKTsKKyAgICAgICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgICAgIGFwcGx5U3RhdGUoY29tcG9uZW50LCBmb3JjZSwg
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1
ZXVlLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBxdWV1ZVtpXSgpOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAg
ICAgY29tcG9uZW50Q2FsbGJhY2tRdWV1ZS5kZWxldGUoY29tcG9uZW50KTsKKyAgICAgICAgICAg
ICAgICBjb21wb25lbnQuX3Byb2Nlc3NpbmdTZXRTdGF0ZSA9IGZhbHNlOworICAgICAgICAgICAg
fSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNhbGxiYWNrKSB7CisgICAgICAgICAgICBxdWV1
ZS5wdXNoKGNhbGxiYWNrKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBmdW5jdGlvbiBxdWV1ZVN0
YXRlQ2hhbmdlcyhjb21wb25lbnQsIG5ld1N0YXRlLCBjYWxsYmFjaykgeworICAgICAgICBpZiAo
aXNGdW5jdGlvbihuZXdTdGF0ZSkpIHsKKyAgICAgICAgICAgIG5ld1N0YXRlID0gbmV3U3RhdGUo
Y29tcG9uZW50LnN0YXRlKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHZhciBzdGF0ZUtleSBp
biBuZXdTdGF0ZSkgeworICAgICAgICAgICAgY29tcG9uZW50Ll9wZW5kaW5nU3RhdGVbc3RhdGVL
ZXldID0gbmV3U3RhdGVbc3RhdGVLZXldOworICAgICAgICB9CisgICAgICAgIGlmICghY29tcG9u
ZW50Ll9wZW5kaW5nU2V0U3RhdGUpIHsKKyAgICAgICAgICAgIGlmIChjb21wb25lbnQuX3Byb2Nl
c3NpbmdTZXRTdGF0ZSB8fCBjYWxsYmFjaykgeworICAgICAgICAgICAgICAgIGFkZFRvUXVldWUo
Y29tcG9uZW50LCBmYWxzZSwgY2FsbGJhY2spOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAgICAgY29tcG9uZW50Ll9wZW5kaW5nU2V0U3RhdGUgPSB0cnVl
OworICAgICAgICAgICAgICAgIGNvbXBvbmVudC5fcHJvY2Vzc2luZ1NldFN0YXRlID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICBhcHBseVN0YXRlKGNvbXBvbmVudCwgZmFsc2UsIGNhbGxiYWNrKTsK
KyAgICAgICAgICAgICAgICBjb21wb25lbnQuX3Byb2Nlc3NpbmdTZXRTdGF0ZSA9IGZhbHNlOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgY29t
cG9uZW50LnN0YXRlID0gT2JqZWN0LmFzc2lnbih7fSwgY29tcG9uZW50LnN0YXRlLCBjb21wb25l
bnQuX3BlbmRpbmdTdGF0ZSk7CisgICAgICAgICAgICBjb21wb25lbnQuX3BlbmRpbmdTdGF0ZSA9
IHt9OworICAgICAgICB9CisgICAgfQorICAgIGZ1bmN0aW9uIGFwcGx5U3RhdGUoY29tcG9uZW50
LCBmb3JjZSwgY2FsbGJhY2spIHsKKyAgICAgICAgaWYgKCghY29tcG9uZW50Ll9kZWZlclNldFN0
YXRlIHx8IGZvcmNlKSAmJiAhY29tcG9uZW50Ll9ibG9ja1JlbmRlcikgeworICAgICAgICAgICAg
Y29tcG9uZW50Ll9wZW5kaW5nU2V0U3RhdGUgPSBmYWxzZTsKKyAgICAgICAgICAgIHZhciBwZW5k
aW5nU3RhdGUgPSBjb21wb25lbnQuX3BlbmRpbmdTdGF0ZTsKKyAgICAgICAgICAgIHZhciBwcmV2
U3RhdGUgPSBjb21wb25lbnQuc3RhdGU7CisgICAgICAgICAgICB2YXIgbmV4dFN0YXRlID0gT2Jq
ZWN0LmFzc2lnbih7fSwgcHJldlN0YXRlLCBwZW5kaW5nU3RhdGUpOworICAgICAgICAgICAgdmFy
IHByb3BzID0gY29tcG9uZW50LnByb3BzOworICAgICAgICAgICAgdmFyIGNvbnRleHQgPSBjb21w
b25lbnQuY29udGV4dDsKKyAgICAgICAgICAgIGNvbXBvbmVudC5fcGVuZGluZ1N0YXRlID0ge307
CisgICAgICAgICAgICB2YXIgbmV4dElucHV0ID0gY29tcG9uZW50Ll91cGRhdGVDb21wb25lbnQo
cHJldlN0YXRlLCBuZXh0U3RhdGUsIHByb3BzLCBwcm9wcywgY29udGV4dCwgZm9yY2UpOworICAg
ICAgICAgICAgdmFyIGRpZFVwZGF0ZSA9IHRydWU7CisgICAgICAgICAgICBpZiAoaXNJbnZhbGlk
KG5leHRJbnB1dCkpIHsKKyAgICAgICAgICAgICAgICBuZXh0SW5wdXQgPSBjcmVhdGVWb2lkVk5v
ZGUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGlzQXJyYXkobmV4dElu
cHV0KSkgeworICAgICAgICAgICAgICAgIGlmIChmYWxzZSkgeworICAgICAgICAgICAgICAgICAg
ICB0aHJvd0Vycm9yKCdhIHZhbGlkIEluZmVybm8gVk5vZGUgKG9yIG51bGwpIG11c3QgYmUgcmV0
dXJuZWQgZnJvbSBhIGNvbXBvbmVudCByZW5kZXIuIFlvdSBtYXkgaGF2ZSByZXR1cm5lZCBhbiBh
cnJheSBvciBhbiBpbnZhbGlkIG9iamVjdC4nKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgdGhyb3dFcnJvcigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBp
ZiAobmV4dElucHV0ID09PSBpbmZlcm5vLk5PX09QKSB7CisgICAgICAgICAgICAgICAgbmV4dElu
cHV0ID0gY29tcG9uZW50Ll9sYXN0SW5wdXQ7CisgICAgICAgICAgICAgICAgZGlkVXBkYXRlID0g
ZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgbGFzdElucHV0ID0gY29tcG9u
ZW50Ll9sYXN0SW5wdXQ7CisgICAgICAgICAgICB2YXIgcGFyZW50RG9tID0gbGFzdElucHV0LmRv
bS5wYXJlbnROb2RlOworICAgICAgICAgICAgY29tcG9uZW50Ll9sYXN0SW5wdXQgPSBuZXh0SW5w
dXQ7CisgICAgICAgICAgICBpZiAoZGlkVXBkYXRlKSB7CisgICAgICAgICAgICAgICAgdmFyIHN1
YkxpZmVjeWNsZSA9IGNvbXBvbmVudC5fbGlmZWN5Y2xlOworICAgICAgICAgICAgICAgIGlmICgh
c3ViTGlmZWN5Y2xlKSB7CisgICAgICAgICAgICAgICAgICAgIHN1YkxpZmVjeWNsZSA9IG5ldyBM
aWZlY3ljbGUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgIHN1YkxpZmVjeWNsZS5saXN0ZW5lcnMgPSBbXTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgY29tcG9uZW50Ll9saWZlY3ljbGUgPSBzdWJMaWZl
Y3ljbGU7CisgICAgICAgICAgICAgICAgdmFyIGNoaWxkQ29udGV4dCA9IGNvbXBvbmVudC5nZXRD
aGlsZENvbnRleHQoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWlzTnVsbE9yVW5kZWYoY2hpbGRD
b250ZXh0KSkgeworICAgICAgICAgICAgICAgICAgICBjaGlsZENvbnRleHQgPSBPYmplY3QuYXNz
aWduKHt9LCBjb250ZXh0LCBjb21wb25lbnQuX2NoaWxkQ29udGV4dCwgY2hpbGRDb250ZXh0KTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIGNoaWxkQ29udGV4dCA9IE9iamVjdC5hc3NpZ24oe30sIGNvbnRleHQsIGNvbXBvbmVu
dC5fY2hpbGRDb250ZXh0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY29t
cG9uZW50Ll9wYXRjaChsYXN0SW5wdXQsIG5leHRJbnB1dCwgcGFyZW50RG9tLCBzdWJMaWZlY3lj
bGUsIGNoaWxkQ29udGV4dCwgY29tcG9uZW50Ll9pc1NWRywgZmFsc2UpOworICAgICAgICAgICAg
ICAgIHN1YkxpZmVjeWNsZS50cmlnZ2VyKCk7CisgICAgICAgICAgICAgICAgY29tcG9uZW50LmNv
bXBvbmVudERpZFVwZGF0ZShwcm9wcywgcHJldlN0YXRlKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHZhciB2Tm9kZSA9IGNvbXBvbmVudC5fdk5vZGU7CisgICAgICAgICAgICB2YXIgZG9t
ID0gdk5vZGUuZG9tID0gbmV4dElucHV0LmRvbTsKKyAgICAgICAgICAgIHZhciBjb21wb25lbnRU
b0RPTU5vZGVNYXAgPSBjb21wb25lbnQuX2NvbXBvbmVudFRvRE9NTm9kZU1hcDsKKyAgICAgICAg
ICAgIGNvbXBvbmVudFRvRE9NTm9kZU1hcCAmJiBjb21wb25lbnRUb0RPTU5vZGVNYXAuc2V0KGNv
bXBvbmVudCwgbmV4dElucHV0LmRvbSk7CisgICAgICAgICAgICB1cGRhdGVQYXJlbnRDb21wb25l
bnRWTm9kZXModk5vZGUsIGRvbSk7CisgICAgICAgICAgICBpZiAoIWlzTnVsbE9yVW5kZWYoY2Fs
bGJhY2spKSB7CisgICAgICAgICAgICAgICAgY2FsbGJhY2soKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKyAgICB2YXIgQ29tcG9uZW50JDEgPSBmdW5jdGlvbiBDb21wb25lbnQk
MShwcm9wcywgY29udGV4dCkgeworICAgICAgICB0aGlzLnN0YXRlID0ge307CisgICAgICAgIHRo
aXMucmVmcyA9IHt9OworICAgICAgICB0aGlzLl9wcm9jZXNzaW5nU2V0U3RhdGUgPSBmYWxzZTsK
KyAgICAgICAgdGhpcy5fYmxvY2tSZW5kZXIgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5faWdub3Jl
U2V0U3RhdGUgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fYmxvY2tTZXRTdGF0ZSA9IGZhbHNlOwor
ICAgICAgICB0aGlzLl9kZWZlclNldFN0YXRlID0gZmFsc2U7CisgICAgICAgIHRoaXMuX3BlbmRp
bmdTZXRTdGF0ZSA9IGZhbHNlOworICAgICAgICB0aGlzLl9wZW5kaW5nU3RhdGUgPSB7fTsKKyAg
ICAgICAgdGhpcy5fbGFzdElucHV0ID0gbnVsbDsKKyAgICAgICAgdGhpcy5fdk5vZGUgPSBudWxs
OworICAgICAgICB0aGlzLl91bm1vdW50ZWQgPSB0cnVlOworICAgICAgICB0aGlzLl9kZXZUb29s
c1N0YXR1cyA9IG51bGw7CisgICAgICAgIHRoaXMuX2RldlRvb2xzSWQgPSBudWxsOworICAgICAg
ICB0aGlzLl9saWZlY3ljbGUgPSBudWxsOworICAgICAgICB0aGlzLl9jaGlsZENvbnRleHQgPSBu
dWxsOworICAgICAgICB0aGlzLl9wYXRjaCA9IG51bGw7CisgICAgICAgIHRoaXMuX2lzU1ZHID0g
ZmFsc2U7CisgICAgICAgIHRoaXMuX2NvbXBvbmVudFRvRE9NTm9kZU1hcCA9IG51bGw7CisgICAg
ICAgIC8qKiBAdHlwZSB7b2JqZWN0fSAqLworICAgICAgICB0aGlzLnByb3BzID0gcHJvcHMgfHwg
aW5mZXJuby5FTVBUWV9PQko7CisgICAgICAgIC8qKiBAdHlwZSB7b2JqZWN0fSAqLworICAgICAg
ICB0aGlzLmNvbnRleHQgPSBjb250ZXh0IHx8IHt9OworICAgICAgICBpZiAoIXRoaXMuY29tcG9u
ZW50RGlkTW91bnQpIHsKKyAgICAgICAgICAgIHRoaXMuY29tcG9uZW50RGlkTW91bnQgPSBudWxs
OworICAgICAgICB9CisgICAgfTsKKyAgICBDb21wb25lbnQkMS5wcm90b3R5cGUucmVuZGVyID0g
ZnVuY3Rpb24gcmVuZGVyIChuZXh0UHJvcHMsIG5leHRTdGF0ZSwgbmV4dENvbnRleHQpIHsKKyAg
ICB9OworICAgIENvbXBvbmVudCQxLnByb3RvdHlwZS5mb3JjZVVwZGF0ZSA9IGZ1bmN0aW9uIGZv
cmNlVXBkYXRlIChjYWxsYmFjaykgeworICAgICAgICBpZiAodGhpcy5fdW5tb3VudGVkKSB7Cisg
ICAgICAgICAgICB0aHJvdyBFcnJvcihub09wKTsKKyAgICAgICAgfQorICAgICAgICBhcHBseVN0
YXRlKHRoaXMsIHRydWUsIGNhbGxiYWNrKTsKKyAgICB9OworICAgIENvbXBvbmVudCQxLnByb3Rv
dHlwZS5zZXRTdGF0ZSA9IGZ1bmN0aW9uIHNldFN0YXRlIChuZXdTdGF0ZSwgY2FsbGJhY2spIHsK
KyAgICAgICAgaWYgKHRoaXMuX3VubW91bnRlZCkgeworICAgICAgICAgICAgdGhyb3cgRXJyb3Io
bm9PcCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCF0aGlzLl9ibG9ja1NldFN0YXRlKSB7Cisg
ICAgICAgICAgICBpZiAoIXRoaXMuX2lnbm9yZVNldFN0YXRlKSB7CisgICAgICAgICAgICAgICAg
cXVldWVTdGF0ZUNoYW5nZXModGhpcywgbmV3U3RhdGUsIGNhbGxiYWNrKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmIChmYWxzZSkgewor
ICAgICAgICAgICAgICAgIHRocm93RXJyb3IoJ2Nhbm5vdCB1cGRhdGUgc3RhdGUgdmlhIHNldFN0
YXRlKCkgaW4gY29tcG9uZW50V2lsbFVwZGF0ZSgpLicpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgdGhyb3dFcnJvcigpOworICAgICAgICB9CisgICAgfTsKKyAgICBDb21wb25lbnQkMS5w
cm90b3R5cGUuY29tcG9uZW50V2lsbE1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50V2lsbE1vdW50
ICgpIHsKKyAgICB9OworICAgIENvbXBvbmVudCQxLnByb3RvdHlwZS5jb21wb25lbnREaWRNb3Vu
dCA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50ICgpIHsKKyAgICB9OworICAgIENvbXBvbmVu
dCQxLnByb3RvdHlwZS5jb21wb25lbnRXaWxsVW5tb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudFdp
bGxVbm1vdW50ICgpIHsKKyAgICB9OworICAgIENvbXBvbmVudCQxLnByb3RvdHlwZS5jb21wb25l
bnREaWRVcGRhdGUgPSBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUgKHByZXZQcm9wcywgcHJl
dlN0YXRlLCBwcmV2Q29udGV4dCkgeworICAgIH07CisgICAgQ29tcG9uZW50JDEucHJvdG90eXBl
LnNob3VsZENvbXBvbmVudFVwZGF0ZSA9IGZ1bmN0aW9uIHNob3VsZENvbXBvbmVudFVwZGF0ZSAo
bmV4dFByb3BzLCBuZXh0U3RhdGUsIGNvbnRleHQpIHsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfTsKKyAgICBDb21wb25lbnQkMS5wcm90b3R5cGUuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9w
cyA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgKG5leHRQcm9wcywgY29udGV4
dCkgeworICAgIH07CisgICAgQ29tcG9uZW50JDEucHJvdG90eXBlLmNvbXBvbmVudFdpbGxVcGRh
dGUgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsVXBkYXRlIChuZXh0UHJvcHMsIG5leHRTdGF0ZSwg
bmV4dENvbnRleHQpIHsKKyAgICB9OworICAgIENvbXBvbmVudCQxLnByb3RvdHlwZS5nZXRDaGls
ZENvbnRleHQgPSBmdW5jdGlvbiBnZXRDaGlsZENvbnRleHQgKCkgeworICAgIH07CisgICAgQ29t
cG9uZW50JDEucHJvdG90eXBlLl91cGRhdGVDb21wb25lbnQgPSBmdW5jdGlvbiBfdXBkYXRlQ29t
cG9uZW50IChwcmV2U3RhdGUsIG5leHRTdGF0ZSwgcHJldlByb3BzLCBuZXh0UHJvcHMsIGNvbnRl
eHQsIGZvcmNlKSB7CisgICAgICAgIGlmICh0aGlzLl91bm1vdW50ZWQgPT09IHRydWUpIHsKKyAg
ICAgICAgICAgIGlmIChmYWxzZSkgeworICAgICAgICAgICAgICAgIHRocm93RXJyb3Iobm9PcCk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aHJvd0Vycm9yKCk7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKChwcmV2UHJvcHMgIT09IG5leHRQcm9wcyB8fCBuZXh0UHJvcHMgPT09IGluZmVy
bm8uRU1QVFlfT0JKKSB8fCBwcmV2U3RhdGUgIT09IG5leHRTdGF0ZSB8fCBmb3JjZSkgeworICAg
ICAgICAgICAgaWYgKHByZXZQcm9wcyAhPT0gbmV4dFByb3BzIHx8IG5leHRQcm9wcyA9PT0gaW5m
ZXJuby5FTVBUWV9PQkopIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9ibG9ja1JlbmRlciA9IHRy
dWU7CisgICAgICAgICAgICAgICAgdGhpcy5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQ
cm9wcywgY29udGV4dCk7CisgICAgICAgICAgICAgICAgdGhpcy5fYmxvY2tSZW5kZXIgPSBmYWxz
ZTsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5fcGVuZGluZ1NldFN0YXRlKSB7CisgICAgICAg
ICAgICAgICAgICAgIG5leHRTdGF0ZSA9IE9iamVjdC5hc3NpZ24oe30sIG5leHRTdGF0ZSwgdGhp
cy5fcGVuZGluZ1N0YXRlKTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fcGVuZGluZ1NldFN0
YXRlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX3BlbmRpbmdTdGF0ZSA9IHt9
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBzaG91
bGRVcGRhdGUgPSB0aGlzLnNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHMsIG5leHRTdGF0
ZSwgY29udGV4dCk7CisgICAgICAgICAgICBpZiAoc2hvdWxkVXBkYXRlICE9PSBmYWxzZSB8fCBm
b3JjZSkgeworICAgICAgICAgICAgICAgIHRoaXMuX2Jsb2NrU2V0U3RhdGUgPSB0cnVlOworICAg
ICAgICAgICAgICAgIHRoaXMuY29tcG9uZW50V2lsbFVwZGF0ZShuZXh0UHJvcHMsIG5leHRTdGF0
ZSwgY29udGV4dCk7CisgICAgICAgICAgICAgICAgdGhpcy5fYmxvY2tTZXRTdGF0ZSA9IGZhbHNl
OworICAgICAgICAgICAgICAgIHRoaXMucHJvcHMgPSBuZXh0UHJvcHM7CisgICAgICAgICAgICAg
ICAgdmFyIHN0YXRlID0gdGhpcy5zdGF0ZSA9IG5leHRTdGF0ZTsKKyAgICAgICAgICAgICAgICB0
aGlzLmNvbnRleHQgPSBjb250ZXh0OworICAgICAgICAgICAgICAgIHRoaXMuX2JlZm9yZVJlbmRl
ciAmJiB0aGlzLl9iZWZvcmVSZW5kZXIoKTsKKyAgICAgICAgICAgICAgICB2YXIgcmVuZGVyID0g
dGhpcy5yZW5kZXIobmV4dFByb3BzLCBzdGF0ZSwgY29udGV4dCk7CisgICAgICAgICAgICAgICAg
dGhpcy5fYWZ0ZXJSZW5kZXIgJiYgdGhpcy5fYWZ0ZXJSZW5kZXIoKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gcmVuZGVyOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVy
biBpbmZlcm5vLk5PX09QOworICAgIH07CisKKyAgICByZXR1cm4gQ29tcG9uZW50JDE7CisKKyAg
ICB9KSkpOworCisKKy8qKiovIH0sCisvKiA1ICovCisvKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4
cG9ydHMpIHsKKworICAgICd1c2Ugc3RyaWN0JzsKKworICAgIGV4cG9ydHMuX19lc01vZHVsZSA9
IHRydWU7CisgICAgZXhwb3J0cy5yZWFkID0gcmVhZDsKKyAgICBleHBvcnRzLmFzc2lnbiA9IGFz
c2lnbjsKKyAgICBleHBvcnRzLmlzRXF1YWwgPSBpc0VxdWFsOworICAgIC8qKgorICAgICAqIFNo
YXJlZCBmdW5jcy92YWx1ZXMKKyAgICAgKi8KKworICAgIHZhciBFTlRFUiA9IGV4cG9ydHMuRU5U
RVIgPSAxMzsKKyAgICB2YXIgRVNDQVBFID0gZXhwb3J0cy5FU0NBUEUgPSAyNzsKKworICAgIHZh
ciBmaWx0ZXJzID0gZXhwb3J0cy5maWx0ZXJzID0geworICAgICAgICBhbGw6IGZ1bmN0aW9uIGFs
bCh0KSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSwKKyAgICAgICAgYWN0
aXZlOiBmdW5jdGlvbiBhY3RpdmUodCkgeworICAgICAgICAgICAgcmV0dXJuICF0LmNvbXBsZXRl
ZDsKKyAgICAgICAgfSwKKyAgICAgICAgY29tcGxldGVkOiBmdW5jdGlvbiBjb21wbGV0ZWQodCkg
eworICAgICAgICAgICAgcmV0dXJuIHQuY29tcGxldGVkOworICAgICAgICB9CisgICAgfTsKKwor
ICAgIC8qKgorICAgICAqIFJlYWQgdGhlIGBsb2NhdGlvbi5oYXNoYCB2YWx1ZQorICAgICAqIEBy
ZXR1cm4ge1N0cmluZ30KKyAgICAgKi8KKyAgICBmdW5jdGlvbiByZWFkKCkgeworICAgICAgICBy
ZXR1cm4gbG9jYXRpb24uaGFzaC5yZXBsYWNlKCcjLycsICcnKSB8fCAnYWxsJzsKKyAgICB9CisK
KyAgICAvKioKKyAgICAgKiBNb2RpZmllZCBgT2JqZWN0LmFzc2lnbmAgc2hpbQorICAgICAqIC0g
YWx3YXlzIHdyaXRlcyB0byBuZXcgb2JqZWN0CisgICAgICogQHJldHVybiB7T2JqZWN0fQorICAg
ICAqLworICAgIGZ1bmN0aW9uIGFzc2lnbigpIHsKKyAgICAgICAgdmFyIHNyYyA9IHZvaWQgMDsK
KyAgICAgICAgdmFyIHRhciA9IHt9OworICAgICAgICBmb3IgKHZhciBzID0gMDsgcyA8IGFyZ3Vt
ZW50cy5sZW5ndGg7IHMrKykgeworICAgICAgICAgICAgc3JjID0gT2JqZWN0KGFyZ3VtZW50c1tz
XSk7CisgICAgICAgICAgICBmb3IgKHZhciBrIGluIHNyYykgeworICAgICAgICAgICAgICAgIHRh
cltrXSA9IHNyY1trXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
dGFyOworICAgIH0KKworICAgIC8qKgorICAgICAqIEFyZSB0d28gT2JqZWN0cyBlcXVhbCB2YWx1
ZXM/CisgICAgICogQHBhcmFtICB7T2JqZWN0fSBhCisgICAgICogQHBhcmFtICB7T2JqZWN0fSBi
CisgICAgICogQHJldHVybiB7Qm9vbGVhbn0KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBpc0VxdWFs
KGEsIGIpIHsKKyAgICAgICAgLy8gQ3JlYXRlIGFycmF5cyBvZiBwcm9wZXJ0eSBuYW1lcworICAg
ICAgICB2YXIgYVByb3BzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYSk7CisgICAgICAg
IHZhciBiUHJvcHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhiKTsKKworICAgICAgICBp
ZiAoYVByb3BzLmxlbmd0aCAhPT0gYlByb3BzLmxlbmd0aCkgcmV0dXJuIGZhbHNlOworCisgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYVByb3BzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAg
ICB2YXIgayA9IGFQcm9wc1tpXTsKKyAgICAgICAgICAgIGlmIChhW2tdICE9PSBiW2tdKSByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKy8q
KiovIH0sCisvKiA2ICovCisvKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFj
a19yZXF1aXJlX18pIHsKKworICAgICd1c2Ugc3RyaWN0JzsKKworICAgIGV4cG9ydHMuX19lc01v
ZHVsZSA9IHRydWU7CisgICAgZXhwb3J0cy5saW5rcyA9IHVuZGVmaW5lZDsKKyAgICBleHBvcnRz
LkhlYWQgPSBIZWFkOworICAgIGV4cG9ydHMuRm9vdCA9IEZvb3Q7CisKKyAgICB2YXIgX2luZmVy
bm8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpOworCisgICAgdmFyIF9pbmZlcm5vMiA9IF9pbnRl
cm9wUmVxdWlyZURlZmF1bHQoX2luZmVybm8pOworCisgICAgdmFyIF9zaGFyZSA9IF9fd2VicGFj
a19yZXF1aXJlX18oNSk7CisKKyAgICBmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9i
aikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmog
fTsgfQorCisgICAgLyoqCisgICAgICogU3RhdGVsZXNzIEhlYWRlciBjb21wb25lbnQKKyAgICAg
Ki8KKyAgICBmdW5jdGlvbiBIZWFkKF9yZWYpIHsKKyAgICAgICAgdmFyIG9uRW50ZXIgPSBfcmVm
Lm9uRW50ZXI7CisKKyAgICAgICAgcmV0dXJuIF9pbmZlcm5vMi5kZWZhdWx0LmNyZWF0ZVZOb2Rl
KDIsICdoZWFkZXInLCB7CisgICAgICAgICAgICAnY2xhc3NOYW1lJzogJ2hlYWRlcicKKyAgICAg
ICAgfSwgW19pbmZlcm5vMi5kZWZhdWx0LmNyZWF0ZVZOb2RlKDIsICdoMScsIG51bGwsICd0b2Rv
cycpLCBfaW5mZXJubzIuZGVmYXVsdC5jcmVhdGVWTm9kZSg1MTIsICdpbnB1dCcsIHsKKyAgICAg
ICAgICAgICdjbGFzc05hbWUnOiAnbmV3LXRvZG8nLAorICAgICAgICAgICAgJ2F1dG9mb2N1cyc6
IHRydWUsCisgICAgICAgICAgICAnYXV0b2NvbXBsZXRlJzogJ29mZicsCisgICAgICAgICAgICAn
cGxhY2Vob2xkZXInOiAnV2hhdCBuZWVkcyB0byBiZSBkb25lPycKKyAgICAgICAgfSwgbnVsbCwg
eworICAgICAgICAgICAgJ29ua2V5ZG93bic6IG9uRW50ZXIKKyAgICAgICAgfSldKTsKKyAgICB9
CisKKyAgICB2YXIgbGlua3MgPSBleHBvcnRzLmxpbmtzID0gW3sgaGFzaDogJyMvJywgbmFtZTog
J0FsbCcgfSwgeyBoYXNoOiAnIy9hY3RpdmUnLCBuYW1lOiAnQWN0aXZlJyB9LCB7IGhhc2g6ICcj
L2NvbXBsZXRlZCcsIG5hbWU6ICdDb21wbGV0ZWQnIH1dOworCisgICAgLyoqCisgICAgICogU3Rh
dGVsZXNzIEZvb3RlciBjb21wb25lbnQKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBGb290KF9yZWYy
KSB7CisgICAgICAgIHZhciBsZWZ0ID0gX3JlZjIubGVmdCwKKyAgICAgICAgICAgIGRvbmUgPSBf
cmVmMi5kb25lLAorICAgICAgICAgICAgcm91dGUgPSBfcmVmMi5yb3V0ZSwKKyAgICAgICAgICAg
IG9uQ2xlYXIgPSBfcmVmMi5vbkNsZWFyOworCisgICAgICAgIHJldHVybiBfaW5mZXJubzIuZGVm
YXVsdC5jcmVhdGVWTm9kZSgyLCAnZm9vdGVyJywgeworICAgICAgICAgICAgJ2NsYXNzTmFtZSc6
ICdmb290ZXInCisgICAgICAgIH0sIFtfaW5mZXJubzIuZGVmYXVsdC5jcmVhdGVWTm9kZSgyLCAn
c3BhbicsIHsKKyAgICAgICAgICAgICdjbGFzc05hbWUnOiAndG9kby1jb3VudCcKKyAgICAgICAg
fSwgW19pbmZlcm5vMi5kZWZhdWx0LmNyZWF0ZVZOb2RlKDIsICdzdHJvbmcnLCBudWxsLCBsZWZ0
KSwgJyAnLCBsZWZ0ID4gMSA/ICdpdGVtcycgOiAnaXRlbScsICcgbGVmdCddKSwgX2luZmVybm8y
LmRlZmF1bHQuY3JlYXRlVk5vZGUoMiwgJ3VsJywgeworICAgICAgICAgICAgJ2NsYXNzTmFtZSc6
ICdmaWx0ZXJzJworICAgICAgICB9LCBsaW5rcy5tYXAoZnVuY3Rpb24gKF9yZWYzKSB7CisgICAg
ICAgICAgICB2YXIgaGFzaCA9IF9yZWYzLmhhc2gsCisgICAgICAgICAgICAgICAgbmFtZSA9IF9y
ZWYzLm5hbWU7CisgICAgICAgICAgICByZXR1cm4gX2luZmVybm8yLmRlZmF1bHQuY3JlYXRlVk5v
ZGUoMiwgJ2xpJywgbnVsbCwgX2luZmVybm8yLmRlZmF1bHQuY3JlYXRlVk5vZGUoMiwgJ2EnLCB7
CisgICAgICAgICAgICAgICAgJ2hyZWYnOiBoYXNoLAorICAgICAgICAgICAgICAgICdjbGFzc05h
bWUnOiBuYW1lLnRvTG93ZXJDYXNlKCkgPT09IHJvdXRlID8gJ3NlbGVjdGVkJyA6ICcnCisgICAg
ICAgICAgICB9LCBuYW1lKSk7CisgICAgICAgIH0pKSwgZG9uZSA+IDAgPyBfaW5mZXJubzIuZGVm
YXVsdC5jcmVhdGVWTm9kZSgyLCAnYnV0dG9uJywgeworICAgICAgICAgICAgJ2NsYXNzTmFtZSc6
ICdjbGVhci1jb21wbGV0ZWQnCisgICAgICAgIH0sICdDbGVhciBjb21wbGV0ZWQnLCB7CisgICAg
ICAgICAgICAnb25DbGljayc6IG9uQ2xlYXIKKyAgICAgICAgfSkgOiBudWxsXSk7CisgICAgfQor
CisvKioqLyB9LAorLyogNyAqLworLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dl
YnBhY2tfcmVxdWlyZV9fKSB7CisKKyAgICAndXNlIHN0cmljdCc7CisKKyAgICBleHBvcnRzLl9f
ZXNNb2R1bGUgPSB0cnVlOworCisgICAgdmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBm
dW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsg
aSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2Up
IHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkp
IHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsKKwor
ICAgIHZhciBfc2hhcmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpOworCisgICAgZnVuY3Rpb24g
X2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBp
bnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2Fs
bCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKTsgfSB9CisKKyAgICB2YXIgU1RPUiA9IHt9OworICAg
IHZhciBTVE9SX0lEID0gJ3RvZG9zLWluZmVybm8nOworCisgICAgdmFyIE1vZGVsID0gZnVuY3Rp
b24gTW9kZWwoKSB7CisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CisKKyAgICAgICAgX2NsYXNz
Q2FsbENoZWNrKHRoaXMsIE1vZGVsKTsKKworICAgICAgICB0aGlzLmdldCA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgIHJldHVybiBfdGhpcy5kYXRhID0gSlNPTi5wYXJzZShTVE9SW1NUT1Jf
SURdIHx8ICdbXScpOworICAgICAgICB9OworCisgICAgICAgIHRoaXMuc2V0ID0gZnVuY3Rpb24g
KGFycikgeworICAgICAgICAgICAgX3RoaXMuZGF0YSA9IGFyciB8fCBfdGhpcy5kYXRhIHx8IFtd
OworICAgICAgICAgICAgU1RPUltTVE9SX0lEXSA9IEpTT04uc3RyaW5naWZ5KF90aGlzLmRhdGEp
OworICAgICAgICAgICAgcmV0dXJuIF90aGlzLmRhdGE7CisgICAgICAgIH07CisKKyAgICAgICAg
dGhpcy5hZGQgPSBmdW5jdGlvbiAoc3RyKSB7CisgICAgICAgICAgICByZXR1cm4gX3RoaXMuc2V0
KF90aGlzLmRhdGEuY29uY2F0KHsgdGl0bGU6IHN0ciwgY29tcGxldGVkOiBmYWxzZSB9KSk7Cisg
ICAgICAgIH07CisKKyAgICAgICAgdGhpcy5wdXQgPSBmdW5jdGlvbiAodG9kbywgb2JqKSB7Cisg
ICAgICAgICAgICByZXR1cm4gX3RoaXMuc2V0KF90aGlzLmRhdGEubWFwKGZ1bmN0aW9uICh0KSB7
CisgICAgICAgICAgICAgICAgcmV0dXJuICgwLCBfc2hhcmUuaXNFcXVhbCkodCwgdG9kbykgPyAo
MCwgX3NoYXJlLmFzc2lnbikodG9kbywgb2JqKSA6IHQ7CisgICAgICAgICAgICB9KSk7CisgICAg
ICAgIH07CisKKyAgICAgICAgdGhpcy5kZWwgPSBmdW5jdGlvbiAodG9kbykgeworICAgICAgICAg
ICAgcmV0dXJuIF90aGlzLnNldChfdGhpcy5kYXRhLmZpbHRlcihmdW5jdGlvbiAodCkgeworICAg
ICAgICAgICAgICAgIHJldHVybiAhKDAsIF9zaGFyZS5pc0VxdWFsKSh0LCB0b2RvKTsKKyAgICAg
ICAgICAgIH0pKTsKKyAgICAgICAgfTsKKworICAgICAgICB0aGlzLnRvZ2dsZSA9IGZ1bmN0aW9u
ICh0b2RvKSB7CisgICAgICAgICAgICByZXR1cm4gX3RoaXMucHV0KHRvZG8sIHsgY29tcGxldGVk
OiAhdG9kby5jb21wbGV0ZWQgfSk7CisgICAgICAgIH07CisKKyAgICAgICAgdGhpcy50b2dnbGVB
bGwgPSBmdW5jdGlvbiAoY29tcGxldGVkKSB7CisgICAgICAgICAgICByZXR1cm4gX3RoaXMuc2V0
KF90aGlzLmRhdGEubWFwKGZ1bmN0aW9uICh0KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIF9l
eHRlbmRzKHt9LCB0LCB7IGNvbXBsZXRlZDogY29tcGxldGVkIH0pOworICAgICAgICAgICAgfSkp
OworICAgICAgICB9OworCisgICAgICAgIHRoaXMuY2xlYXJDb21wbGV0ZWQgPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgICAgICByZXR1cm4gX3RoaXMuc2V0KF90aGlzLmRhdGEuZmlsdGVyKGZ1bmN0
aW9uICh0KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICF0LmNvbXBsZXRlZDsKKyAgICAgICAg
ICAgIH0pKTsKKyAgICAgICAgfTsKKyAgICB9OworCisgICAgZXhwb3J0cy5kZWZhdWx0ID0gTW9k
ZWw7CisKKy8qKiovIH0sCisvKiA4ICovCisvKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMs
IF9fd2VicGFja19yZXF1aXJlX18pIHsKKworICAgICd1c2Ugc3RyaWN0JzsKKworICAgIGV4cG9y
dHMuX19lc01vZHVsZSA9IHRydWU7CisKKyAgICB2YXIgX2luZmVybm8gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKDEpOworCisgICAgdmFyIF9pbmZlcm5vMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQo
X2luZmVybm8pOworCisgICAgdmFyIF9pbmZlcm5vQ29tcG9uZW50ID0gX193ZWJwYWNrX3JlcXVp
cmVfXygzKTsKKworICAgIHZhciBfaW5mZXJub0NvbXBvbmVudDIgPSBfaW50ZXJvcFJlcXVpcmVE
ZWZhdWx0KF9pbmZlcm5vQ29tcG9uZW50KTsKKworICAgIHZhciBfc2hhcmUgPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKDUpOworCisgICAgZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmop
IHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07
IH0KKworICAgIGZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhvYmosIGtleXMpIHsg
dmFyIHRhcmdldCA9IHt9OyBmb3IgKHZhciBpIGluIG9iaikgeyBpZiAoa2V5cy5pbmRleE9mKGkp
ID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2Fs
bChvYmosIGkpKSBjb250aW51ZTsgdGFyZ2V0W2ldID0gb2JqW2ldOyB9IHJldHVybiB0YXJnZXQ7
IH0KKworICAgIGZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3Ip
IHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5
cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIik7IH0gfQorCisgICAg
ZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNl
bGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxp
c2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTsgfSByZXR1cm4gY2FsbCAmJiAodHlw
ZW9mIGNhbGwgPT09ICJvYmplY3QiIHx8IHR5cGVvZiBjYWxsID09PSAiZnVuY3Rpb24iKSA/IGNh
bGwgOiBzZWxmOyB9CisKKyAgICBmdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xh
c3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSAiZnVuY3Rpb24iICYmIHN1cGVyQ2xhc3Mg
IT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVp
dGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9
IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNs
YXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFi
bGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChz
dXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yo
c3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsg
fQorCisgICAgdmFyIEl0ZW0gPSBmdW5jdGlvbiAoX0NvbXBvbmVudCkgeworICAgICAgICBfaW5o
ZXJpdHMoSXRlbSwgX0NvbXBvbmVudCk7CisKKyAgICAgICAgZnVuY3Rpb24gSXRlbShfcmVmKSB7
CisgICAgICAgICAgICB2YXIgZGF0YSA9IF9yZWYuZGF0YSwKKyAgICAgICAgICAgICAgICBwcm9w
cyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbJ2RhdGEnXSk7CisKKyAgICAgICAg
ICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBJdGVtKTsKKworICAgICAgICAgICAgdmFyIF90aGlz
ID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX0NvbXBvbmVudC5jYWxsKHRoaXMs
IHByb3BzKSk7CisKKyAgICAgICAgICAgIF9pbml0aWFsaXNlUHJvcHMuY2FsbChfdGhpcyk7CisK
KyAgICAgICAgICAgIF90aGlzLnRvZG8gPSBkYXRhOworICAgICAgICAgICAgX3RoaXMuc3RhdGUg
PSB7IHRleHQ6IGRhdGEudGl0bGUgfTsKKyAgICAgICAgICAgIF90aGlzLmVkaXRvciA9IG51bGw7
CisgICAgICAgICAgICByZXR1cm4gX3RoaXM7CisgICAgICAgIH0KKworICAgICAgICBJdGVtLnBy
b3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoX3JlZjIsIF9yZWYzKSB7CisgICAgICAg
ICAgICB2YXIgX3RoaXMyID0gdGhpczsKKworICAgICAgICAgICAgdmFyIGRvVG9nZ2xlID0gX3Jl
ZjIuZG9Ub2dnbGUsCisgICAgICAgICAgICAgICAgZG9EZWxldGUgPSBfcmVmMi5kb0RlbGV0ZSwK
KyAgICAgICAgICAgICAgICBkb1NhdmUgPSBfcmVmMi5kb1NhdmUsCisgICAgICAgICAgICAgICAg
b25CbHVyID0gX3JlZjIub25CbHVyLAorICAgICAgICAgICAgICAgIG9uRm9jdXMgPSBfcmVmMi5v
bkZvY3VzOworICAgICAgICAgICAgdmFyIHRleHQgPSBfcmVmMy50ZXh0OworICAgICAgICAgICAg
dmFyIF90b2RvID0gdGhpcy50b2RvLAorICAgICAgICAgICAgICAgIHRpdGxlID0gX3RvZG8udGl0
bGUsCisgICAgICAgICAgICAgICAgY29tcGxldGVkID0gX3RvZG8uY29tcGxldGVkLAorICAgICAg
ICAgICAgICAgIGVkaXRpbmcgPSBfdG9kby5lZGl0aW5nOworCisKKyAgICAgICAgICAgIHZhciBj
bHMgPSBbXTsKKyAgICAgICAgICAgIGVkaXRpbmcgJiYgY2xzLnB1c2goJ2VkaXRpbmcnKTsKKyAg
ICAgICAgICAgIGNvbXBsZXRlZCAmJiBjbHMucHVzaCgnY29tcGxldGVkJyk7CisKKyAgICAgICAg
ICAgIHZhciBoYW5kbGVLZXlkb3duID0gZnVuY3Rpb24gaGFuZGxlS2V5ZG93bihlKSB7CisgICAg
ICAgICAgICAgICAgaWYgKGUud2hpY2ggPT09IF9zaGFyZS5FU0NBUEUpIHJldHVybiBvbkJsdXIo
KTsKKyAgICAgICAgICAgICAgICBpZiAoZS53aGljaCA9PT0gX3NoYXJlLkVOVEVSKSByZXR1cm4g
ZG9TYXZlKHRleHQpOworICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgLy8gdG1wIGZpeAor
ICAgICAgICAgICAgdmFyIGhhbmRsZUJsdXIgPSBmdW5jdGlvbiBoYW5kbGVCbHVyKCkgeworICAg
ICAgICAgICAgICAgIHJldHVybiBkb1NhdmUodGV4dCk7CisgICAgICAgICAgICB9OworICAgICAg
ICAgICAgdmFyIGhhbmRsZUlucHV0ID0gZnVuY3Rpb24gaGFuZGxlSW5wdXQoZSkgeworICAgICAg
ICAgICAgICAgIHJldHVybiBfdGhpczIuc2V0VGV4dChlLnRhcmdldC52YWx1ZSk7CisgICAgICAg
ICAgICB9OworCisgICAgICAgICAgICByZXR1cm4gX2luZmVybm8yLmRlZmF1bHQuY3JlYXRlVk5v
ZGUoMiwgJ2xpJywgeworICAgICAgICAgICAgICAgICdjbGFzc05hbWUnOiBjbHMuam9pbignICcp
CisgICAgICAgICAgICB9LCBbX2luZmVybm8yLmRlZmF1bHQuY3JlYXRlVk5vZGUoMiwgJ2Rpdics
IHsKKyAgICAgICAgICAgICAgICAnY2xhc3NOYW1lJzogJ3ZpZXcnCisgICAgICAgICAgICB9LCBb
X2luZmVybm8yLmRlZmF1bHQuY3JlYXRlVk5vZGUoNTEyLCAnaW5wdXQnLCB7CisgICAgICAgICAg
ICAgICAgJ2NsYXNzTmFtZSc6ICd0b2dnbGUnLAorICAgICAgICAgICAgICAgICd0eXBlJzogJ2No
ZWNrYm94JywKKyAgICAgICAgICAgICAgICAnY2hlY2tlZCc6IGNvbXBsZXRlZAorICAgICAgICAg
ICAgfSwgbnVsbCwgeworICAgICAgICAgICAgICAgICdvbkNsaWNrJzogZG9Ub2dnbGUKKyAgICAg
ICAgICAgIH0pLCBfaW5mZXJubzIuZGVmYXVsdC5jcmVhdGVWTm9kZSgyLCAnbGFiZWwnLCBudWxs
LCB0aXRsZSwgeworICAgICAgICAgICAgICAgICdvbmRibGNsaWNrJzogb25Gb2N1cworICAgICAg
ICAgICAgfSksIF9pbmZlcm5vMi5kZWZhdWx0LmNyZWF0ZVZOb2RlKDIsICdidXR0b24nLCB7Cisg
ICAgICAgICAgICAgICAgJ2NsYXNzTmFtZSc6ICdkZXN0cm95JworICAgICAgICAgICAgfSwgbnVs
bCwgeworICAgICAgICAgICAgICAgICdvbkNsaWNrJzogZG9EZWxldGUKKyAgICAgICAgICAgIH0p
XSksIF9pbmZlcm5vMi5kZWZhdWx0LmNyZWF0ZVZOb2RlKDUxMiwgJ2lucHV0JywgeworICAgICAg
ICAgICAgICAgICdjbGFzc05hbWUnOiAnZWRpdCcsCisgICAgICAgICAgICAgICAgJ3ZhbHVlJzog
ZWRpdGluZyAmJiB0ZXh0CisgICAgICAgICAgICB9LCBudWxsLCB7CisgICAgICAgICAgICAgICAg
J29uYmx1cic6IGhhbmRsZUJsdXIsCisgICAgICAgICAgICAgICAgJ29uaW5wdXQnOiBoYW5kbGVJ
bnB1dCwKKyAgICAgICAgICAgICAgICAnb25rZXlkb3duJzogaGFuZGxlS2V5ZG93bgorICAgICAg
ICAgICAgfSwgbnVsbCwgZnVuY3Rpb24gKGVsKSB7CisgICAgICAgICAgICAgICAgX3RoaXMyLmVk
aXRvciA9IGVsOworICAgICAgICAgICAgfSldKTsKKyAgICAgICAgfTsKKworICAgICAgICByZXR1
cm4gSXRlbTsKKyAgICB9KF9pbmZlcm5vQ29tcG9uZW50Mi5kZWZhdWx0KTsKKworICAgIHZhciBf
aW5pdGlhbGlzZVByb3BzID0gZnVuY3Rpb24gX2luaXRpYWxpc2VQcm9wcygpIHsKKyAgICAgICAg
dmFyIF90aGlzMyA9IHRoaXM7CisKKyAgICAgICAgdGhpcy5jb21wb25lbnRXaWxsUmVjZWl2ZVBy
b3BzID0gZnVuY3Rpb24gKF9yZWY0KSB7CisgICAgICAgICAgICB2YXIgZGF0YSA9IF9yZWY0LmRh
dGE7CisgICAgICAgICAgICByZXR1cm4gX3RoaXMzLnNldFRleHQoZGF0YS50aXRsZSk7CisgICAg
ICAgIH07CisKKyAgICAgICAgdGhpcy5zaG91bGRDb21wb25lbnRVcGRhdGUgPSBmdW5jdGlvbiAo
X3JlZjUsIF9yZWY2KSB7CisgICAgICAgICAgICB2YXIgZGF0YSA9IF9yZWY1LmRhdGE7CisgICAg
ICAgICAgICB2YXIgdGV4dCA9IF9yZWY2LnRleHQ7CisgICAgICAgICAgICByZXR1cm4gISgoMCwg
X3NoYXJlLmlzRXF1YWwpKGRhdGEsIF90aGlzMy50b2RvKSAmJiB0ZXh0ID09PSBfdGhpczMuc3Rh
dGUudGV4dCk7CisgICAgICAgIH07CisKKyAgICAgICAgdGhpcy5jb21wb25lbnRXaWxsVXBkYXRl
ID0gZnVuY3Rpb24gKF9yZWY3KSB7CisgICAgICAgICAgICB2YXIgZGF0YSA9IF9yZWY3LmRhdGE7
CisgICAgICAgICAgICByZXR1cm4gX3RoaXMzLnRvZG8gPSBkYXRhOworICAgICAgICB9OworCisg
ICAgICAgIHRoaXMuY29tcG9uZW50RGlkVXBkYXRlID0gZnVuY3Rpb24gKCkgeworICAgICAgICAg
ICAgcmV0dXJuIF90aGlzMy5lZGl0b3IuZm9jdXMoKTsKKyAgICAgICAgfTsKKworICAgICAgICB0
aGlzLnNldFRleHQgPSBmdW5jdGlvbiAodGV4dCkgeworICAgICAgICAgICAgcmV0dXJuIF90aGlz
My5zZXRTdGF0ZSh7IHRleHQ6IHRleHQgfSk7CisgICAgICAgIH07CisgICAgfTsKKworICAgIGV4
cG9ydHMuZGVmYXVsdCA9IEl0ZW07CisKKy8qKiovIH0KKy8qKioqKiovIF0pOwpcIE5vIG5ld2xp
bmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0
ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2luZmVybm8vaW5kZXgu
aHRtbCBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJj
aGl0ZWN0dXJlLWV4YW1wbGVzL2luZmVybm8vaW5kZXguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MDE1Nzgx
NWQzY2I5ZDkxNTZlODhmYmQwNjJlZGNhNDg4M2ZjNTA2Ci0tLSAvZGV2L251bGwKKysrIGIvUGVy
Zm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUt
ZXhhbXBsZXMvaW5mZXJuby9pbmRleC5odG1sCkBAIC0wLDAgKzEsMTggQEAKKzwhZG9jdHlwZSBo
dG1sPgorPGh0bWwgbGFuZz0iZW4iIGRhdGEtZnJhbWV3b3JrPSJpbmZlcm5vIj4KKyAgICA8aGVh
ZD4KKyAgICAgICAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgorICAgICAgICA8dGl0bGU+SW5mZXJu
byDigKIgVG9kb01WQzwvdGl0bGU+CisgICAgICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJl
Zj0ibm9kZV9tb2R1bGVzL3RvZG9tdmMtY29tbW9uL2Jhc2UuY3NzIj4KKyAgICAgICAgPGxpbmsg
cmVsPSJzdHlsZXNoZWV0IiBocmVmPSJub2RlX21vZHVsZXMvdG9kb212Yy1hcHAtY3NzL2luZGV4
LmNzcyI+CisgICAgPC9oZWFkPgorICAgIDxib2R5PgorICAgICAgICA8c2VjdGlvbiBpZD0iYXBw
IiBjbGFzcz0idG9kb2FwcCI+PC9zZWN0aW9uPgorICAgICAgICA8Zm9vdGVyIGNsYXNzPSJpbmZv
Ij4KKyAgICAgICAgICAgIDxwPkRvdWJsZS1jbGljayB0byBlZGl0IGEgdG9kbzwvcD4KKyAgICAg
ICAgICAgIDxwPlBhcnQgb2YgPGEgaHJlZj0iaHR0cDovL3RvZG9tdmMuY29tIj5Ub2RvTVZDPC9h
PjwvcD4KKyAgICAgICAgPC9mb290ZXI+CisKKyAgICAgICAgPHNjcmlwdCBzcmM9ImRpc3QvYnVu
ZGxlLmpzIj48L3NjcmlwdD4KKyAgICA8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9QZXJm
b3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1l
eGFtcGxlcy9pbmZlcm5vL25vZGVfbW9kdWxlcy90b2RvbXZjLWFwcC1jc3MvaW5kZXguY3NzIGIv
UGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1
cmUtZXhhbXBsZXMvaW5mZXJuby9ub2RlX21vZHVsZXMvdG9kb212Yy1hcHAtY3NzL2luZGV4LmNz
cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4xMGUzZDJmNmI3OTNkNDJjYjRlMjBhZWVhNDhhM2I1Y2ViNDg2ZWU1Ci0t
LSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMv
dG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvaW5mZXJuby9ub2RlX21vZHVsZXMvdG9kb212
Yy1hcHAtY3NzL2luZGV4LmNzcwpAQCAtMCwwICsxLDM3MCBAQAoraHRtbCwKK2JvZHkgeworICAg
IG1hcmdpbjogMDsKKyAgICBwYWRkaW5nOiAwOworfQorCitidXR0b24geworICAgIG1hcmdpbjog
MDsKKyAgICBwYWRkaW5nOiAwOworICAgIGJvcmRlcjogMDsKKyAgICBiYWNrZ3JvdW5kOiBub25l
OworICAgIGZvbnQtc2l6ZTogMTAwJTsKKyAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7Cisg
ICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CisgICAgZm9udC13ZWlnaHQ6IGluaGVyaXQ7CisgICAg
Y29sb3I6IGluaGVyaXQ7CisgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOworICAgIGFwcGVh
cmFuY2U6IG5vbmU7CisgICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7Cisg
ICAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTsKK30KKworYm9keSB7CisgICAg
Zm9udDogMTRweCAnSGVsdmV0aWNhIE5ldWUnLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlm
OworICAgIGxpbmUtaGVpZ2h0OiAxLjRlbTsKKyAgICBiYWNrZ3JvdW5kOiAjZjVmNWY1OworICAg
IGNvbG9yOiAjNGQ0ZDRkOworICAgIG1pbi13aWR0aDogMjMwcHg7CisgICAgbWF4LXdpZHRoOiA1
NTBweDsKKyAgICBtYXJnaW46IDAgYXV0bzsKKyAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBh
bnRpYWxpYXNlZDsKKyAgICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlOworICAg
IGZvbnQtd2VpZ2h0OiAzMDA7Cit9CisKKzpmb2N1cyB7CisgICAgb3V0bGluZTogMDsKK30KKwor
LmhpZGRlbiB7CisgICAgZGlzcGxheTogbm9uZTsKK30KKworLnRvZG9hcHAgeworICAgIGJhY2tn
cm91bmQ6ICNmZmY7CisgICAgbWFyZ2luOiAxMzBweCAwIDQwcHggMDsKKyAgICBwb3NpdGlvbjog
cmVsYXRpdmU7CisgICAgYm94LXNoYWRvdzogMCAycHggNHB4IDAgcmdiYSgwLCAwLCAwLCAwLjIp
LAorICAgICAgICAgICAgICAgIDAgMjVweCA1MHB4IDAgcmdiYSgwLCAwLCAwLCAwLjEpOworfQor
CisudG9kb2FwcCBpbnB1dDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7CisgICAgZm9udC1z
dHlsZTogaXRhbGljOworICAgIGZvbnQtd2VpZ2h0OiAzMDA7CisgICAgY29sb3I6ICNlNmU2ZTY7
Cit9CisKKy50b2RvYXBwIGlucHV0OjotbW96LXBsYWNlaG9sZGVyIHsKKyAgICBmb250LXN0eWxl
OiBpdGFsaWM7CisgICAgZm9udC13ZWlnaHQ6IDMwMDsKKyAgICBjb2xvcjogI2U2ZTZlNjsKK30K
KworLnRvZG9hcHAgaW5wdXQ6OmlucHV0LXBsYWNlaG9sZGVyIHsKKyAgICBmb250LXN0eWxlOiBp
dGFsaWM7CisgICAgZm9udC13ZWlnaHQ6IDMwMDsKKyAgICBjb2xvcjogI2U2ZTZlNjsKK30KKwor
LnRvZG9hcHAgaDEgeworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IC0xNTVweDsK
KyAgICB3aWR0aDogMTAwJTsKKyAgICBmb250LXNpemU6IDEwMHB4OworICAgIGZvbnQtd2VpZ2h0
OiAxMDA7CisgICAgdGV4dC1hbGlnbjogY2VudGVyOworICAgIGNvbG9yOiByZ2JhKDE3NSwgNDcs
IDQ3LCAwLjE1KTsKKyAgICAtd2Via2l0LXRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxp
dHk7CisgICAgLW1vei10ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5OworICAgIHRl
eHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHk7Cit9CisKKy5uZXctdG9kbywKKy5lZGl0
IHsKKyAgICBwb3NpdGlvbjogcmVsYXRpdmU7CisgICAgbWFyZ2luOiAwOworICAgIHdpZHRoOiAx
MDAlOworICAgIGZvbnQtc2l6ZTogMjRweDsKKyAgICBmb250LWZhbWlseTogaW5oZXJpdDsKKyAg
ICBmb250LXdlaWdodDogaW5oZXJpdDsKKyAgICBsaW5lLWhlaWdodDogMS40ZW07CisgICAgYm9y
ZGVyOiAwOworICAgIGNvbG9yOiBpbmhlcml0OworICAgIHBhZGRpbmc6IDZweDsKKyAgICBib3Jk
ZXI6IDFweCBzb2xpZCAjOTk5OworICAgIGJveC1zaGFkb3c6IGluc2V0IDAgLTFweCA1cHggMCBy
Z2JhKDAsIDAsIDAsIDAuMik7CisgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKKyAgICAtd2Vi
a2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKKyAgICAtbW96LW9zeC1mb250LXNtb290
aGluZzogZ3JheXNjYWxlOworfQorCisubmV3LXRvZG8geworICAgIHBhZGRpbmc6IDE2cHggMTZw
eCAxNnB4IDYwcHg7CisgICAgYm9yZGVyOiBub25lOworICAgIGJhY2tncm91bmQ6IHJnYmEoMCwg
MCwgMCwgMC4wMDMpOworICAgIGJveC1zaGFkb3c6IGluc2V0IDAgLTJweCAxcHggcmdiYSgwLDAs
MCwwLjAzKTsKK30KKworLm1haW4geworICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICB6LWlu
ZGV4OiAyOworICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZTZlNmU2OworfQorCitsYWJlbFtm
b3I9J3RvZ2dsZS1hbGwnXSB7CisgICAgZGlzcGxheTogbm9uZTsKK30KKworLnRvZ2dsZS1hbGwg
eworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IC01NXB4OworICAgIGxlZnQ6IC0x
MnB4OworICAgIHdpZHRoOiA2MHB4OworICAgIGhlaWdodDogMzRweDsKKyAgICB0ZXh0LWFsaWdu
OiBjZW50ZXI7CisgICAgYm9yZGVyOiBub25lOyAvKiBNb2JpbGUgU2FmYXJpICovCit9CisKKy50
b2dnbGUtYWxsOmJlZm9yZSB7CisgICAgY29udGVudDogJ+Kdryc7CisgICAgZm9udC1zaXplOiAy
MnB4OworICAgIGNvbG9yOiAjZTZlNmU2OworICAgIHBhZGRpbmc6IDEwcHggMjdweCAxMHB4IDI3
cHg7Cit9CisKKy50b2dnbGUtYWxsOmNoZWNrZWQ6YmVmb3JlIHsKKyAgICBjb2xvcjogIzczNzM3
MzsKK30KKworLnRvZG8tbGlzdCB7CisgICAgbWFyZ2luOiAwOworICAgIHBhZGRpbmc6IDA7Cisg
ICAgbGlzdC1zdHlsZTogbm9uZTsKK30KKworLnRvZG8tbGlzdCBsaSB7CisgICAgcG9zaXRpb246
IHJlbGF0aXZlOworICAgIGZvbnQtc2l6ZTogMjRweDsKKyAgICBib3JkZXItYm90dG9tOiAxcHgg
c29saWQgI2VkZWRlZDsKK30KKworLnRvZG8tbGlzdCBsaTpsYXN0LWNoaWxkIHsKKyAgICBib3Jk
ZXItYm90dG9tOiBub25lOworfQorCisudG9kby1saXN0IGxpLmVkaXRpbmcgeworICAgIGJvcmRl
ci1ib3R0b206IG5vbmU7CisgICAgcGFkZGluZzogMDsKK30KKworLnRvZG8tbGlzdCBsaS5lZGl0
aW5nIC5lZGl0IHsKKyAgICBkaXNwbGF5OiBibG9jazsKKyAgICB3aWR0aDogNTA2cHg7CisgICAg
cGFkZGluZzogMTJweCAxNnB4OworICAgIG1hcmdpbjogMCAwIDAgNDNweDsKK30KKworLnRvZG8t
bGlzdCBsaS5lZGl0aW5nIC52aWV3IHsKKyAgICBkaXNwbGF5OiBub25lOworfQorCisudG9kby1s
aXN0IGxpIC50b2dnbGUgeworICAgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICB3aWR0aDogNDBw
eDsKKyAgICAvKiBhdXRvLCBzaW5jZSBub24tV2ViS2l0IGJyb3dzZXJzIGRvZXNuJ3Qgc3VwcG9y
dCBpbnB1dCBzdHlsaW5nICovCisgICAgaGVpZ2h0OiBhdXRvOworICAgIHBvc2l0aW9uOiBhYnNv
bHV0ZTsKKyAgICB0b3A6IDA7CisgICAgYm90dG9tOiAwOworICAgIG1hcmdpbjogYXV0byAwOwor
ICAgIGJvcmRlcjogbm9uZTsgLyogTW9iaWxlIFNhZmFyaSAqLworICAgIC13ZWJraXQtYXBwZWFy
YW5jZTogbm9uZTsKKyAgICBhcHBlYXJhbmNlOiBub25lOworfQorCisudG9kby1saXN0IGxpIC50
b2dnbGU6YWZ0ZXIgeworICAgIGNvbnRlbnQ6IHVybCgnZGF0YTppbWFnZS9zdmcreG1sO3V0Zjgs
PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0MCIgaGVpZ2h0
PSI0MCIgdmlld0JveD0iLTEwIC0xOCAxMDAgMTM1Ij48Y2lyY2xlIGN4PSI1MCIgY3k9IjUwIiBy
PSI1MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZWRlZGVkIiBzdHJva2Utd2lkdGg9IjMiLz48L3N2
Zz4nKTsKK30KKworLnRvZG8tbGlzdCBsaSAudG9nZ2xlOmNoZWNrZWQ6YWZ0ZXIgeworICAgIGNv
bnRlbnQ6IHVybCgnZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsPHN2ZyB4bWxucz0iaHR0cDovL3d3
dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgdmlld0JveD0iLTEwIC0x
OCAxMDAgMTM1Ij48Y2lyY2xlIGN4PSI1MCIgY3k9IjUwIiByPSI1MCIgZmlsbD0ibm9uZSIgc3Ry
b2tlPSIjYmRkYWQ1IiBzdHJva2Utd2lkdGg9IjMiLz48cGF0aCBmaWxsPSIjNWRjMmFmIiBkPSJN
NzIgMjVMNDIgNzEgMjcgNTZsLTQgNCAyMCAyMCAzNC01MnoiLz48L3N2Zz4nKTsKK30KKworLnRv
ZG8tbGlzdCBsaSBsYWJlbCB7CisgICAgd29yZC1icmVhazogYnJlYWstYWxsOworICAgIHBhZGRp
bmc6IDE1cHggNjBweCAxNXB4IDE1cHg7CisgICAgbWFyZ2luLWxlZnQ6IDQ1cHg7CisgICAgZGlz
cGxheTogYmxvY2s7CisgICAgbGluZS1oZWlnaHQ6IDEuMjsKKyAgICB0cmFuc2l0aW9uOiBjb2xv
ciAwLjRzOworfQorCisudG9kby1saXN0IGxpLmNvbXBsZXRlZCBsYWJlbCB7CisgICAgY29sb3I6
ICNkOWQ5ZDk7CisgICAgdGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7Cit9CisKKy50b2Rv
LWxpc3QgbGkgLmRlc3Ryb3kgeworICAgIGRpc3BsYXk6IG5vbmU7CisgICAgcG9zaXRpb246IGFi
c29sdXRlOworICAgIHRvcDogMDsKKyAgICByaWdodDogMTBweDsKKyAgICBib3R0b206IDA7Cisg
ICAgd2lkdGg6IDQwcHg7CisgICAgaGVpZ2h0OiA0MHB4OworICAgIG1hcmdpbjogYXV0byAwOwor
ICAgIGZvbnQtc2l6ZTogMzBweDsKKyAgICBjb2xvcjogI2NjOWE5YTsKKyAgICBtYXJnaW4tYm90
dG9tOiAxMXB4OworICAgIHRyYW5zaXRpb246IGNvbG9yIDAuMnMgZWFzZS1vdXQ7Cit9CisKKy50
b2RvLWxpc3QgbGkgLmRlc3Ryb3k6aG92ZXIgeworICAgIGNvbG9yOiAjYWY1YjVlOworfQorCisu
dG9kby1saXN0IGxpIC5kZXN0cm95OmFmdGVyIHsKKyAgICBjb250ZW50OiAnw5cnOworfQorCisu
dG9kby1saXN0IGxpOmhvdmVyIC5kZXN0cm95IHsKKyAgICBkaXNwbGF5OiBibG9jazsKK30KKwor
LnRvZG8tbGlzdCBsaSAuZWRpdCB7CisgICAgZGlzcGxheTogbm9uZTsKK30KKworLnRvZG8tbGlz
dCBsaS5lZGl0aW5nOmxhc3QtY2hpbGQgeworICAgIG1hcmdpbi1ib3R0b206IC0xcHg7Cit9CisK
Ky5mb290ZXIgeworICAgIGNvbG9yOiAjNzc3OworICAgIHBhZGRpbmc6IDEwcHggMTVweDsKKyAg
ICBoZWlnaHQ6IDIwcHg7CisgICAgdGV4dC1hbGlnbjogY2VudGVyOworICAgIGJvcmRlci10b3A6
IDFweCBzb2xpZCAjZTZlNmU2OworfQorCisuZm9vdGVyOmJlZm9yZSB7CisgICAgY29udGVudDog
Jyc7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIHJpZ2h0OiAwOworICAgIGJvdHRvbTog
MDsKKyAgICBsZWZ0OiAwOworICAgIGhlaWdodDogNTBweDsKKyAgICBvdmVyZmxvdzogaGlkZGVu
OworICAgIGJveC1zaGFkb3c6IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMiksCisgICAgICAg
ICAgICAgICAgMCA4cHggMCAtM3B4ICNmNmY2ZjYsCisgICAgICAgICAgICAgICAgMCA5cHggMXB4
IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLAorICAgICAgICAgICAgICAgIDAgMTZweCAwIC02cHgg
I2Y2ZjZmNiwKKyAgICAgICAgICAgICAgICAwIDE3cHggMnB4IC02cHggcmdiYSgwLCAwLCAwLCAw
LjIpOworfQorCisudG9kby1jb3VudCB7CisgICAgZmxvYXQ6IGxlZnQ7CisgICAgdGV4dC1hbGln
bjogbGVmdDsKK30KKworLnRvZG8tY291bnQgc3Ryb25nIHsKKyAgICBmb250LXdlaWdodDogMzAw
OworfQorCisuZmlsdGVycyB7CisgICAgbWFyZ2luOiAwOworICAgIHBhZGRpbmc6IDA7CisgICAg
bGlzdC1zdHlsZTogbm9uZTsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgcmlnaHQ6IDA7
CisgICAgbGVmdDogMDsKK30KKworLmZpbHRlcnMgbGkgeworICAgIGRpc3BsYXk6IGlubGluZTsK
K30KKworLmZpbHRlcnMgbGkgYSB7CisgICAgY29sb3I6IGluaGVyaXQ7CisgICAgbWFyZ2luOiAz
cHg7CisgICAgcGFkZGluZzogM3B4IDdweDsKKyAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cisg
ICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7CisgICAgYm9yZGVyLXJhZGl1czogM3B4
OworfQorCisuZmlsdGVycyBsaSBhOmhvdmVyIHsKKyAgICBib3JkZXItY29sb3I6IHJnYmEoMTc1
LCA0NywgNDcsIDAuMSk7Cit9CisKKy5maWx0ZXJzIGxpIGEuc2VsZWN0ZWQgeworICAgIGJvcmRl
ci1jb2xvcjogcmdiYSgxNzUsIDQ3LCA0NywgMC4yKTsKK30KKworLmNsZWFyLWNvbXBsZXRlZCwK
K2h0bWwgLmNsZWFyLWNvbXBsZXRlZDphY3RpdmUgeworICAgIGZsb2F0OiByaWdodDsKKyAgICBw
b3NpdGlvbjogcmVsYXRpdmU7CisgICAgbGluZS1oZWlnaHQ6IDIwcHg7CisgICAgdGV4dC1kZWNv
cmF0aW9uOiBub25lOworICAgIGN1cnNvcjogcG9pbnRlcjsKK30KKworLmNsZWFyLWNvbXBsZXRl
ZDpob3ZlciB7CisgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cit9CisKKy5pbmZvIHsK
KyAgICBtYXJnaW46IDY1cHggYXV0byAwOworICAgIGNvbG9yOiAjYmZiZmJmOworICAgIGZvbnQt
c2l6ZTogMTBweDsKKyAgICB0ZXh0LXNoYWRvdzogMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUs
IDAuNSk7CisgICAgdGV4dC1hbGlnbjogY2VudGVyOworfQorCisuaW5mbyBwIHsKKyAgICBsaW5l
LWhlaWdodDogMTsKK30KKworLmluZm8gYSB7CisgICAgY29sb3I6IGluaGVyaXQ7CisgICAgdGV4
dC1kZWNvcmF0aW9uOiBub25lOworICAgIGZvbnQtd2VpZ2h0OiA0MDA7Cit9CisKKy5pbmZvIGE6
aG92ZXIgeworICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworfQorCisvKgorICAgIEhh
Y2sgdG8gcmVtb3ZlIGJhY2tncm91bmQgZnJvbSBNb2JpbGUgU2FmYXJpLgorICAgIENhbid0IHVz
ZSBpdCBnbG9iYWxseSBzaW5jZSBpdCBkZXN0cm95cyBjaGVja2JveGVzIGluIEZpcmVmb3gKKyov
CitAbWVkaWEgc2NyZWVuIGFuZCAoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOjApIHsK
KyAgICAudG9nZ2xlLWFsbCwKKyAgICAudG9kby1saXN0IGxpIC50b2dnbGUgeworICAgICAgICBi
YWNrZ3JvdW5kOiBub25lOworICAgIH0KKworICAgIC50b2RvLWxpc3QgbGkgLnRvZ2dsZSB7Cisg
ICAgICAgIGhlaWdodDogNDBweDsKKyAgICB9CisKKyAgICAudG9nZ2xlLWFsbCB7CisgICAgICAg
IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpOworICAgICAgICB0cmFuc2Zvcm06IHJv
dGF0ZSg5MGRlZyk7CisgICAgICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKKyAgICAgICAg
YXBwZWFyYW5jZTogbm9uZTsKKyAgICB9Cit9CisKK0BtZWRpYSAobWF4LXdpZHRoOiA0MzBweCkg
eworICAgIC5mb290ZXIgeworICAgICAgICBoZWlnaHQ6IDUwcHg7CisgICAgfQorCisgICAgLmZp
bHRlcnMgeworICAgICAgICBib3R0b206IDEwcHg7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvUGVy
Zm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUt
ZXhhbXBsZXMvaW5mZXJuby9ub2RlX21vZHVsZXMvdG9kb212Yy1hcHAtY3NzL3BhY2thZ2UuanNv
biBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0
ZWN0dXJlLWV4YW1wbGVzL2luZmVybm8vbm9kZV9tb2R1bGVzL3RvZG9tdmMtYXBwLWNzcy9wYWNr
YWdlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNDY1MzFjNWQyNDM1YjIxMTYzYTY3YjgwZTQxNWE3NDdkOTg4
MmViZgotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVz
b3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2luZmVybm8vbm9kZV9tb2R1bGVz
L3RvZG9tdmMtYXBwLWNzcy9wYWNrYWdlLmpzb24KQEAgLTAsMCArMSwyNiBAQAoreworICAibmFt
ZSI6ICJ0b2RvbXZjLWFwcC1jc3MiLAorICAic3R5bGUiOiAiaW5kZXguY3NzIiwKKyAgInZlcnNp
b24iOiAiMi4wLjYiLAorICAiZGVzY3JpcHRpb24iOiAiQ1NTIGZvciBUb2RvTVZDIGFwcHMiLAor
ICAibGljZW5zZSI6ICJDQy1CWS00LjAiLAorICAicmVwb3NpdG9yeSI6ICJ0YXN0ZWpzL3RvZG9t
dmMtYXBwLWNzcyIsCisgICJhdXRob3IiOiB7CisgICAgIm5hbWUiOiAiU2luZHJlIFNvcmh1cyIs
CisgICAgImVtYWlsIjogInNpbmRyZXNvcmh1c0BnbWFpbC5jb20iLAorICAgICJ1cmwiOiAic2lu
ZHJlc29yaHVzLmNvbSIKKyAgfSwKKyAgImZpbGVzIjogWworICAgICJpbmRleC5jc3MiCisgIF0s
CisgICJrZXl3b3JkcyI6IFsKKyAgICAidG9kb212YyIsCisgICAgInRhc3RlanMiLAorICAgICJh
cHAiLAorICAgICJ0b2RvIiwKKyAgICAidGVtcGxhdGUiLAorICAgICJjc3MiLAorICAgICJzdHls
ZSIsCisgICAgInN0eWxlc2hlZXQiCisgIF0KK30KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVz
dHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2lu
ZmVybm8vbm9kZV9tb2R1bGVzL3RvZG9tdmMtYXBwLWNzcy9yZWFkbWUubWQgYi9QZXJmb3JtYW5j
ZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxl
cy9pbmZlcm5vL25vZGVfbW9kdWxlcy90b2RvbXZjLWFwcC1jc3MvcmVhZG1lLm1kCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjZkZGJlYmYwMjRjMDRhZWI2MDIwY2FmMTMxYTJlZDAzMTg5MDgwYTUKLS0tIC9kZXYvbnVs
bAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2Fy
Y2hpdGVjdHVyZS1leGFtcGxlcy9pbmZlcm5vL25vZGVfbW9kdWxlcy90b2RvbXZjLWFwcC1jc3Mv
cmVhZG1lLm1kCkBAIC0wLDAgKzEsMjggQEAKKyMgdG9kb212Yy1hcHAtY3NzCisKKz4gQ1NTIGZv
ciBUb2RvTVZDIGFwcHMKKworIVtdKHNjcmVlbnNob3QucG5nKQorCisKKyMjIEluc3RhbGwKKwor
CitgYGAKKyQgbnBtIGluc3RhbGwgLS1zYXZlIHRvZG9tdmMtYXBwLWNzcworYGBgCisKKworIyMg
R2V0dGluZyBzdGFydGVkCisKK2BgYGh0bWwKKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0i
bm9kZV9tb2R1bGVzL3RvZG9tdmMtYXBwLWNzcy9pbmRleC5jc3MiPgorYGBgCisKK1NlZSB0aGUg
W1RvZG9NVkMgYXBwIHRlbXBsYXRlXShodHRwczovL2dpdGh1Yi5jb20vdGFzdGVqcy90b2RvbXZj
LWFwcC10ZW1wbGF0ZSkuCisKKworCisjIyBMaWNlbnNlCisKKzxhIHJlbD0ibGljZW5zZSIgaHJl
Zj0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnkvNC4wL2RlZWQuZW5fVVMi
PjxpbWcgYWx0PSJDcmVhdGl2ZSBDb21tb25zIExpY2Vuc2UiIHN0eWxlPSJib3JkZXItd2lkdGg6
MCIgc3JjPSJodHRwOi8vaS5jcmVhdGl2ZWNvbW1vbnMub3JnL2wvYnkvNC4wLzgweDE1LnBuZyIg
Lz48L2E+PGJyIC8+VGhpcyA8c3BhbiB4bWxuczpkY3Q9Imh0dHA6Ly9wdXJsLm9yZy9kYy90ZXJt
cy8iIGhyZWY9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9JbnRlcmFjdGl2ZVJlc291cmNl
IiByZWw9ImRjdDp0eXBlIj53b3JrPC9zcGFuPiBieSA8YSB4bWxuczpjYz0iaHR0cDovL2NyZWF0
aXZlY29tbW9ucy5vcmcvbnMjIiBocmVmPSJodHRwOi8vc2luZHJlc29yaHVzLmNvbSIgcHJvcGVy
dHk9ImNjOmF0dHJpYnV0aW9uTmFtZSIgcmVsPSJjYzphdHRyaWJ1dGlvblVSTCI+U2luZHJlIFNv
cmh1czwvYT4gaXMgbGljZW5zZWQgdW5kZXIgYSA8YSByZWw9ImxpY2Vuc2UiIGhyZWY9Imh0dHA6
Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LzQuMC9kZWVkLmVuX1VTIj5DcmVhdGl2
ZSBDb21tb25zIEF0dHJpYnV0aW9uIDQuMCBJbnRlcm5hdGlvbmFsIExpY2Vuc2U8L2E+LgpkaWZm
IC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9h
cmNoaXRlY3R1cmUtZXhhbXBsZXMvaW5mZXJuby9ub2RlX21vZHVsZXMvdG9kb212Yy1jb21tb24v
YmFzZS5jc3MgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZj
L2FyY2hpdGVjdHVyZS1leGFtcGxlcy9pbmZlcm5vL25vZGVfbW9kdWxlcy90b2RvbXZjLWNvbW1v
bi9iYXNlLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZDI1ZDNjODRhYzZjNmFlZjI2Yjk2ODNhMmJjMTBjNjFm
OTYwYzhmCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9y
ZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvaW5mZXJuby9ub2RlX21vZHVs
ZXMvdG9kb212Yy1jb21tb24vYmFzZS5jc3MKQEAgLTAsMCArMSwxNDEgQEAKK2hyIHsKKyAgICBt
YXJnaW46IDIwcHggMDsKKyAgICBib3JkZXI6IDA7CisgICAgYm9yZGVyLXRvcDogMXB4IGRhc2hl
ZCAjYzVjNWM1OworICAgIGJvcmRlci1ib3R0b206IDFweCBkYXNoZWQgI2Y3ZjdmNzsKK30KKwor
LmxlYXJuIGEgeworICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgICAgdGV4dC1kZWNvcmF0aW9u
OiBub25lOworICAgIGNvbG9yOiAjYjgzZjQ1OworfQorCisubGVhcm4gYTpob3ZlciB7CisgICAg
dGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CisgICAgY29sb3I6ICM3ODdlN2U7Cit9CisKKy5s
ZWFybiBoMywKKy5sZWFybiBoNCwKKy5sZWFybiBoNSB7CisgICAgbWFyZ2luOiAxMHB4IDA7Cisg
ICAgZm9udC13ZWlnaHQ6IDUwMDsKKyAgICBsaW5lLWhlaWdodDogMS4yOworICAgIGNvbG9yOiAj
MDAwOworfQorCisubGVhcm4gaDMgeworICAgIGZvbnQtc2l6ZTogMjRweDsKK30KKworLmxlYXJu
IGg0IHsKKyAgICBmb250LXNpemU6IDE4cHg7Cit9CisKKy5sZWFybiBoNSB7CisgICAgbWFyZ2lu
LWJvdHRvbTogMDsKKyAgICBmb250LXNpemU6IDE0cHg7Cit9CisKKy5sZWFybiB1bCB7CisgICAg
cGFkZGluZzogMDsKKyAgICBtYXJnaW46IDAgMCAzMHB4IDI1cHg7Cit9CisKKy5sZWFybiBsaSB7
CisgICAgbGluZS1oZWlnaHQ6IDIwcHg7Cit9CisKKy5sZWFybiBwIHsKKyAgICBmb250LXNpemU6
IDE1cHg7CisgICAgZm9udC13ZWlnaHQ6IDMwMDsKKyAgICBsaW5lLWhlaWdodDogMS4zOworICAg
IG1hcmdpbi10b3A6IDA7CisgICAgbWFyZ2luLWJvdHRvbTogMDsKK30KKworI2lzc3VlLWNvdW50
IHsKKyAgICBkaXNwbGF5OiBub25lOworfQorCisucXVvdGUgeworICAgIGJvcmRlcjogbm9uZTsK
KyAgICBtYXJnaW46IDIwcHggMCA2MHB4IDA7Cit9CisKKy5xdW90ZSBwIHsKKyAgICBmb250LXN0
eWxlOiBpdGFsaWM7Cit9CisKKy5xdW90ZSBwOmJlZm9yZSB7CisgICAgY29udGVudDogJ+KAnCc7
CisgICAgZm9udC1zaXplOiA1MHB4OworICAgIG9wYWNpdHk6IC4xNTsKKyAgICBwb3NpdGlvbjog
YWJzb2x1dGU7CisgICAgdG9wOiAtMjBweDsKKyAgICBsZWZ0OiAzcHg7Cit9CisKKy5xdW90ZSBw
OmFmdGVyIHsKKyAgICBjb250ZW50OiAn4oCdJzsKKyAgICBmb250LXNpemU6IDUwcHg7CisgICAg
b3BhY2l0eTogLjE1OworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICBib3R0b206IC00MnB4
OworICAgIHJpZ2h0OiAzcHg7Cit9CisKKy5xdW90ZSBmb290ZXIgeworICAgIHBvc2l0aW9uOiBh
YnNvbHV0ZTsKKyAgICBib3R0b206IC00MHB4OworICAgIHJpZ2h0OiAwOworfQorCisucXVvdGUg
Zm9vdGVyIGltZyB7CisgICAgYm9yZGVyLXJhZGl1czogM3B4OworfQorCisucXVvdGUgZm9vdGVy
IGEgeworICAgIG1hcmdpbi1sZWZ0OiA1cHg7CisgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsK
K30KKworLnNwZWVjaC1idWJibGUgeworICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICBwYWRk
aW5nOiAxMHB4OworICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgLjA0KTsKKyAgICBib3Jk
ZXItcmFkaXVzOiA1cHg7Cit9CisKKy5zcGVlY2gtYnViYmxlOmFmdGVyIHsKKyAgICBjb250ZW50
OiAnJzsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgdG9wOiAxMDAlOworICAgIHJpZ2h0
OiAzMHB4OworICAgIGJvcmRlcjogMTNweCBzb2xpZCB0cmFuc3BhcmVudDsKKyAgICBib3JkZXIt
dG9wLWNvbG9yOiByZ2JhKDAsIDAsIDAsIC4wNCk7Cit9CisKKy5sZWFybi1iYXIgPiAubGVhcm4g
eworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB3aWR0aDogMjcycHg7CisgICAgdG9wOiA4
cHg7CisgICAgbGVmdDogLTMwMHB4OworICAgIHBhZGRpbmc6IDEwcHg7CisgICAgYm9yZGVyLXJh
ZGl1czogNXB4OworICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgLjYp
OworICAgIHRyYW5zaXRpb24tcHJvcGVydHk6IGxlZnQ7CisgICAgdHJhbnNpdGlvbi1kdXJhdGlv
bjogNTAwbXM7Cit9CisKK0BtZWRpYSAobWluLXdpZHRoOiA4OTlweCkgeworICAgIC5sZWFybi1i
YXIgeworICAgICAgICB3aWR0aDogYXV0bzsKKyAgICAgICAgcGFkZGluZy1sZWZ0OiAzMDBweDsK
KyAgICB9CisKKyAgICAubGVhcm4tYmFyID4gLmxlYXJuIHsKKyAgICAgICAgbGVmdDogOHB4Owor
ICAgIH0KK30KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2luZmVybm8vbm9kZV9tb2R1bGVzL3Rv
ZG9tdmMtY29tbW9uL2Jhc2UuanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291
cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9pbmZlcm5vL25vZGVfbW9kdWxlcy90
b2RvbXZjLWNvbW1vbi9iYXNlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgxZTAwNmJjNTAyZGRjNGM3NGY0N2Jk
MTNhODM5MjI3N2Y4MzBkYjgKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1Nw
ZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9pbmZlcm5v
L25vZGVfbW9kdWxlcy90b2RvbXZjLWNvbW1vbi9iYXNlLmpzCkBAIC0wLDAgKzEsMjQ5IEBACisv
KiBnbG9iYWwgXyAqLworKGZ1bmN0aW9uICgpIHsKKyAgICAndXNlIHN0cmljdCc7CisKKyAgICAv
KiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovCisgICAgLy8gVW5kZXJzY29yZSdzIFRlbXBsYXRlIE1v
ZHVsZQorICAgIC8vIENvdXJ0ZXN5IG9mIHVuZGVyc2NvcmVqcy5vcmcKKyAgICB2YXIgXyA9IChm
dW5jdGlvbiAoXykgeworICAgICAgICBfLmRlZmF1bHRzID0gZnVuY3Rpb24gKG9iamVjdCkgewor
ICAgICAgICAgICAgaWYgKCFvYmplY3QpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yICh2YXIgYXJnc0luZGV4ID0gMSwgYXJn
c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7IGFyZ3NJbmRleCA8IGFyZ3NMZW5ndGg7IGFyZ3NJ
bmRleCsrKSB7CisgICAgICAgICAgICAgICAgdmFyIGl0ZXJhYmxlID0gYXJndW1lbnRzW2FyZ3NJ
bmRleF07CisgICAgICAgICAgICAgICAgaWYgKGl0ZXJhYmxlKSB7CisgICAgICAgICAgICAgICAg
ICAgIGZvciAodmFyIGtleSBpbiBpdGVyYWJsZSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKG9iamVjdFtrZXldID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
YmplY3Rba2V5XSA9IGl0ZXJhYmxlW2tleV07CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICByZXR1cm4gb2JqZWN0OworICAgICAgICB9CisKKyAgICAgICAgLy8gQnkgZGVm
YXVsdCwgVW5kZXJzY29yZSB1c2VzIEVSQi1zdHlsZSB0ZW1wbGF0ZSBkZWxpbWl0ZXJzLCBjaGFu
Z2UgdGhlCisgICAgICAgIC8vIGZvbGxvd2luZyB0ZW1wbGF0ZSBzZXR0aW5ncyB0byB1c2UgYWx0
ZXJuYXRpdmUgZGVsaW1pdGVycy4KKyAgICAgICAgXy50ZW1wbGF0ZVNldHRpbmdzID0geworICAg
ICAgICAgICAgZXZhbHVhdGUgICAgOiAvPCUoW1xzXFNdKz8pJT4vZywKKyAgICAgICAgICAgIGlu
dGVycG9sYXRlIDogLzwlPShbXHNcU10rPyklPi9nLAorICAgICAgICAgICAgZXNjYXBlICAgICAg
OiAvPCUtKFtcc1xTXSs/KSU+L2cKKyAgICAgICAgfTsKKworICAgICAgICAvLyBXaGVuIGN1c3Rv
bWl6aW5nIGB0ZW1wbGF0ZVNldHRpbmdzYCwgaWYgeW91IGRvbid0IHdhbnQgdG8gZGVmaW5lIGFu
CisgICAgICAgIC8vIGludGVycG9sYXRpb24sIGV2YWx1YXRpb24gb3IgZXNjYXBpbmcgcmVnZXgs
IHdlIG5lZWQgb25lIHRoYXQgaXMKKyAgICAgICAgLy8gZ3VhcmFudGVlZCBub3QgdG8gbWF0Y2gu
CisgICAgICAgIHZhciBub01hdGNoID0gLyguKV4vOworCisgICAgICAgIC8vIENlcnRhaW4gY2hh
cmFjdGVycyBuZWVkIHRvIGJlIGVzY2FwZWQgc28gdGhhdCB0aGV5IGNhbiBiZSBwdXQgaW50byBh
CisgICAgICAgIC8vIHN0cmluZyBsaXRlcmFsLgorICAgICAgICB2YXIgZXNjYXBlcyA9IHsKKyAg
ICAgICAgICAgICInIjogICAgICAiJyIsCisgICAgICAgICAgICAnXFwnOiAgICAgJ1xcJywKKyAg
ICAgICAgICAgICdccic6ICAgICAncicsCisgICAgICAgICAgICAnXG4nOiAgICAgJ24nLAorICAg
ICAgICAgICAgJ1x0JzogICAgICd0JywKKyAgICAgICAgICAgICdcdTIwMjgnOiAndTIwMjgnLAor
ICAgICAgICAgICAgJ1x1MjAyOSc6ICd1MjAyOScKKyAgICAgICAgfTsKKworICAgICAgICB2YXIg
ZXNjYXBlciA9IC9cXHwnfFxyfFxufFx0fFx1MjAyOHxcdTIwMjkvZzsKKworICAgICAgICAvLyBK
YXZhU2NyaXB0IG1pY3JvLXRlbXBsYXRpbmcsIHNpbWlsYXIgdG8gSm9obiBSZXNpZydzIGltcGxl
bWVudGF0aW9uLgorICAgICAgICAvLyBVbmRlcnNjb3JlIHRlbXBsYXRpbmcgaGFuZGxlcyBhcmJp
dHJhcnkgZGVsaW1pdGVycywgcHJlc2VydmVzIHdoaXRlc3BhY2UsCisgICAgICAgIC8vIGFuZCBj
b3JyZWN0bHkgZXNjYXBlcyBxdW90ZXMgd2l0aGluIGludGVycG9sYXRlZCBjb2RlLgorICAgICAg
ICBfLnRlbXBsYXRlID0gZnVuY3Rpb24odGV4dCwgZGF0YSwgc2V0dGluZ3MpIHsKKyAgICAgICAg
ICAgIHZhciByZW5kZXI7CisgICAgICAgICAgICBzZXR0aW5ncyA9IF8uZGVmYXVsdHMoe30sIHNl
dHRpbmdzLCBfLnRlbXBsYXRlU2V0dGluZ3MpOworCisgICAgICAgICAgICAvLyBDb21iaW5lIGRl
bGltaXRlcnMgaW50byBvbmUgcmVndWxhciBleHByZXNzaW9uIHZpYSBhbHRlcm5hdGlvbi4KKyAg
ICAgICAgICAgIHZhciBtYXRjaGVyID0gbmV3IFJlZ0V4cChbCisgICAgICAgICAgICAgICAgKHNl
dHRpbmdzLmVzY2FwZSB8fCBub01hdGNoKS5zb3VyY2UsCisgICAgICAgICAgICAgICAgKHNldHRp
bmdzLmludGVycG9sYXRlIHx8IG5vTWF0Y2gpLnNvdXJjZSwKKyAgICAgICAgICAgICAgICAoc2V0
dGluZ3MuZXZhbHVhdGUgfHwgbm9NYXRjaCkuc291cmNlCisgICAgICAgICAgICBdLmpvaW4oJ3wn
KSArICd8JCcsICdnJyk7CisKKyAgICAgICAgICAgIC8vIENvbXBpbGUgdGhlIHRlbXBsYXRlIHNv
dXJjZSwgZXNjYXBpbmcgc3RyaW5nIGxpdGVyYWxzIGFwcHJvcHJpYXRlbHkuCisgICAgICAgICAg
ICB2YXIgaW5kZXggPSAwOworICAgICAgICAgICAgdmFyIHNvdXJjZSA9ICJfX3ArPSciOworICAg
ICAgICAgICAgdGV4dC5yZXBsYWNlKG1hdGNoZXIsIGZ1bmN0aW9uKG1hdGNoLCBlc2NhcGUsIGlu
dGVycG9sYXRlLCBldmFsdWF0ZSwgb2Zmc2V0KSB7CisgICAgICAgICAgICAgICAgc291cmNlICs9
IHRleHQuc2xpY2UoaW5kZXgsIG9mZnNldCkKKyAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2Uo
ZXNjYXBlciwgZnVuY3Rpb24obWF0Y2gpIHsgcmV0dXJuICdcXCcgKyBlc2NhcGVzW21hdGNoXTsg
fSk7CisKKyAgICAgICAgICAgICAgICBpZiAoZXNjYXBlKSB7CisgICAgICAgICAgICAgICAgICAg
IHNvdXJjZSArPSAiJytcbigoX190PSgiICsgZXNjYXBlICsgIikpPT1udWxsPycnOl8uZXNjYXBl
KF9fdCkpK1xuJyI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChpbnRl
cnBvbGF0ZSkgeworICAgICAgICAgICAgICAgICAgICBzb3VyY2UgKz0gIicrXG4oKF9fdD0oIiAr
IGludGVycG9sYXRlICsgIikpPT1udWxsPycnOl9fdCkrXG4nIjsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgaWYgKGV2YWx1YXRlKSB7CisgICAgICAgICAgICAgICAgICAgIHNv
dXJjZSArPSAiJztcbiIgKyBldmFsdWF0ZSArICJcbl9fcCs9JyI7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGluZGV4ID0gb2Zmc2V0ICsgbWF0Y2gubGVuZ3RoOworICAgICAg
ICAgICAgICAgIHJldHVybiBtYXRjaDsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgc291
cmNlICs9ICInO1xuIjsKKworICAgICAgICAgICAgLy8gSWYgYSB2YXJpYWJsZSBpcyBub3Qgc3Bl
Y2lmaWVkLCBwbGFjZSBkYXRhIHZhbHVlcyBpbiBsb2NhbCBzY29wZS4KKyAgICAgICAgICAgIGlm
ICghc2V0dGluZ3MudmFyaWFibGUpIHNvdXJjZSA9ICd3aXRoKG9ianx8e30pe1xuJyArIHNvdXJj
ZSArICd9XG4nOworCisgICAgICAgICAgICBzb3VyY2UgPSAidmFyIF9fdCxfX3A9JycsX19qPUFy
cmF5LnByb3RvdHlwZS5qb2luLCIgKworICAgICAgICAgICAgICAgICJwcmludD1mdW5jdGlvbigp
e19fcCs9X19qLmNhbGwoYXJndW1lbnRzLCcnKTt9O1xuIiArCisgICAgICAgICAgICAgICAgc291
cmNlICsgInJldHVybiBfX3A7XG4iOworCisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAg
ICAgIHJlbmRlciA9IG5ldyBGdW5jdGlvbihzZXR0aW5ncy52YXJpYWJsZSB8fCAnb2JqJywgJ18n
LCBzb3VyY2UpOworICAgICAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgICAgIGUu
c291cmNlID0gc291cmNlOworICAgICAgICAgICAgICAgIHRocm93IGU7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmIChkYXRhKSByZXR1cm4gcmVuZGVyKGRhdGEsIF8pOworICAgICAg
ICAgICAgdmFyIHRlbXBsYXRlID0gZnVuY3Rpb24oZGF0YSkgeworICAgICAgICAgICAgICAgIHJl
dHVybiByZW5kZXIuY2FsbCh0aGlzLCBkYXRhLCBfKTsKKyAgICAgICAgICAgIH07CisKKyAgICAg
ICAgICAgIC8vIFByb3ZpZGUgdGhlIGNvbXBpbGVkIGZ1bmN0aW9uIHNvdXJjZSBhcyBhIGNvbnZl
bmllbmNlIGZvciBwcmVjb21waWxhdGlvbi4KKyAgICAgICAgICAgIHRlbXBsYXRlLnNvdXJjZSA9
ICdmdW5jdGlvbignICsgKHNldHRpbmdzLnZhcmlhYmxlIHx8ICdvYmonKSArICcpe1xuJyArIHNv
dXJjZSArICd9JzsKKworICAgICAgICAgICAgcmV0dXJuIHRlbXBsYXRlOworICAgICAgICB9Owor
CisgICAgICAgIHJldHVybiBfOworICAgIH0pKHt9KTsKKworICAgIGlmIChsb2NhdGlvbi5ob3N0
bmFtZSA9PT0gJ3RvZG9tdmMuY29tJykgeworICAgICAgICAoZnVuY3Rpb24oaSxzLG8sZyxyLGEs
bSl7aVsnR29vZ2xlQW5hbHl0aWNzT2JqZWN0J109cjtpW3JdPWlbcl18fGZ1bmN0aW9uKCl7Cisg
ICAgICAgIChpW3JdLnE9aVtyXS5xfHxbXSkucHVzaChhcmd1bWVudHMpfSxpW3JdLmw9MSpuZXcg
RGF0ZSgpO2E9cy5jcmVhdGVFbGVtZW50KG8pLAorICAgICAgICBtPXMuZ2V0RWxlbWVudHNCeVRh
Z05hbWUobylbMF07YS5hc3luYz0xO2Euc3JjPWc7bS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShh
LG0pCisgICAgICAgIH0pKHdpbmRvdyxkb2N1bWVudCwnc2NyaXB0JywnaHR0cHM6Ly93d3cuZ29v
Z2xlLWFuYWx5dGljcy5jb20vYW5hbHl0aWNzLmpzJywnZ2EnKTsKKyAgICAgICAgZ2EoJ2NyZWF0
ZScsICdVQS0zMTA4MTA2Mi0xJywgJ2F1dG8nKTsKKyAgICAgICAgZ2EoJ3NlbmQnLCAncGFnZXZp
ZXcnKTsKKyAgICB9CisgICAgLyoganNoaW50IGlnbm9yZTplbmQgKi8KKworICAgIGZ1bmN0aW9u
IHJlZGlyZWN0KCkgeworICAgICAgICBpZiAobG9jYXRpb24uaG9zdG5hbWUgPT09ICd0YXN0ZWpz
LmdpdGh1Yi5pbycpIHsKKyAgICAgICAgICAgIGxvY2F0aW9uLmhyZWYgPSBsb2NhdGlvbi5ocmVm
LnJlcGxhY2UoJ3Rhc3RlanMuZ2l0aHViLmlvL3RvZG9tdmMnLCAndG9kb212Yy5jb20nKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIGZpbmRSb290KCkgeworICAgICAgICB2YXIg
YmFzZSA9IGxvY2F0aW9uLmhyZWYuaW5kZXhPZignZXhhbXBsZXMvJyk7CisgICAgICAgIHJldHVy
biBsb2NhdGlvbi5ocmVmLnN1YnN0cigwLCBiYXNlKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBn
ZXRGaWxlKGZpbGUsIGNhbGxiYWNrKSB7CisgICAgICAgIGlmICghbG9jYXRpb24uaG9zdCkgewor
ICAgICAgICAgICAgcmV0dXJuIGNvbnNvbGUuaW5mbygnTWlzcyB0aGUgaW5mbyBiYXI/IFJ1biBU
b2RvTVZDIGZyb20gYSBzZXJ2ZXIgdG8gYXZvaWQgYSBjcm9zcy1vcmlnaW4gZXJyb3IuJyk7Cisg
ICAgICAgIH0KKworICAgICAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisKKyAg
ICAgICAgeGhyLm9wZW4oJ0dFVCcsIGZpbmRSb290KCkgKyBmaWxlLCB0cnVlKTsKKyAgICAgICAg
eGhyLnNlbmQoKTsKKworICAgICAgICB4aHIub25sb2FkID0gZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgaWYgKHhoci5zdGF0dXMgPT09IDIwMCAmJiBjYWxsYmFjaykgeworICAgICAgICAgICAg
ICAgIGNhbGxiYWNrKHhoci5yZXNwb25zZVRleHQpOworICAgICAgICAgICAgfQorICAgICAgICB9
OworICAgIH0KKworICAgIGZ1bmN0aW9uIExlYXJuKGxlYXJuSlNPTiwgY29uZmlnKSB7CisgICAg
ICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBMZWFybikpIHsKKyAgICAgICAgICAgIHJldHVybiBu
ZXcgTGVhcm4obGVhcm5KU09OLCBjb25maWcpOworICAgICAgICB9CisKKyAgICAgICAgdmFyIHRl
bXBsYXRlLCBmcmFtZXdvcms7CisKKyAgICAgICAgaWYgKHR5cGVvZiBsZWFybkpTT04gIT09ICdv
YmplY3QnKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGxlYXJuSlNPTiA9
IEpTT04ucGFyc2UobGVhcm5KU09OKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoY29uZmlnKSB7CisgICAgICAgICAgICB0ZW1wbGF0ZSA9IGNvbmZpZy50ZW1wbGF0ZTsKKyAg
ICAgICAgICAgIGZyYW1ld29yayA9IGNvbmZpZy5mcmFtZXdvcms7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoIXRlbXBsYXRlICYmIGxlYXJuSlNPTi50ZW1wbGF0ZXMpIHsKKyAgICAgICAgICAg
IHRlbXBsYXRlID0gbGVhcm5KU09OLnRlbXBsYXRlcy50b2RvbXZjOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKCFmcmFtZXdvcmsgJiYgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2RhdGEtZnJh
bWV3b3JrXScpKSB7CisgICAgICAgICAgICBmcmFtZXdvcmsgPSBkb2N1bWVudC5xdWVyeVNlbGVj
dG9yKCdbZGF0YS1mcmFtZXdvcmtdJykuZGF0YXNldC5mcmFtZXdvcms7CisgICAgICAgIH0KKwor
ICAgICAgICB0aGlzLnRlbXBsYXRlID0gdGVtcGxhdGU7CisKKyAgICAgICAgaWYgKGxlYXJuSlNP
Ti5iYWNrZW5kKSB7CisgICAgICAgICAgICB0aGlzLmZyYW1ld29ya0pTT04gPSBsZWFybkpTT04u
YmFja2VuZDsKKyAgICAgICAgICAgIHRoaXMuZnJhbWV3b3JrSlNPTi5pc3N1ZUxhYmVsID0gZnJh
bWV3b3JrOworICAgICAgICAgICAgdGhpcy5hcHBlbmQoeworICAgICAgICAgICAgICAgIGJhY2tl
bmQ6IHRydWUKKyAgICAgICAgICAgIH0pOworICAgICAgICB9IGVsc2UgaWYgKGxlYXJuSlNPTltm
cmFtZXdvcmtdKSB7CisgICAgICAgICAgICB0aGlzLmZyYW1ld29ya0pTT04gPSBsZWFybkpTT05b
ZnJhbWV3b3JrXTsKKyAgICAgICAgICAgIHRoaXMuZnJhbWV3b3JrSlNPTi5pc3N1ZUxhYmVsID0g
ZnJhbWV3b3JrOworICAgICAgICAgICAgdGhpcy5hcHBlbmQoKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHRoaXMuZmV0Y2hJc3N1ZUNvdW50KCk7CisgICAgfQorCisgICAgTGVhcm4ucHJvdG90eXBl
LmFwcGVuZCA9IGZ1bmN0aW9uIChvcHRzKSB7CisgICAgICAgIHZhciBhc2lkZSA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoJ2FzaWRlJyk7CisgICAgICAgIGFzaWRlLmlubmVySFRNTCA9IF8udGVt
cGxhdGUodGhpcy50ZW1wbGF0ZSwgdGhpcy5mcmFtZXdvcmtKU09OKTsKKyAgICAgICAgYXNpZGUu
Y2xhc3NOYW1lID0gJ2xlYXJuJzsKKworICAgICAgICBpZiAob3B0cyAmJiBvcHRzLmJhY2tlbmQp
IHsKKyAgICAgICAgICAgIC8vIFJlbW92ZSBkZW1vIGxpbmsKKyAgICAgICAgICAgIHZhciBzb3Vy
Y2VMaW5rcyA9IGFzaWRlLnF1ZXJ5U2VsZWN0b3IoJy5zb3VyY2UtbGlua3MnKTsKKyAgICAgICAg
ICAgIHZhciBoZWFkaW5nID0gc291cmNlTGlua3MuZmlyc3RFbGVtZW50Q2hpbGQ7CisgICAgICAg
ICAgICB2YXIgc291cmNlTGluayA9IHNvdXJjZUxpbmtzLmxhc3RFbGVtZW50Q2hpbGQ7CisgICAg
ICAgICAgICAvLyBDb3JyZWN0IGxpbmsgcGF0aAorICAgICAgICAgICAgdmFyIGhyZWYgPSBzb3Vy
Y2VMaW5rLmdldEF0dHJpYnV0ZSgnaHJlZicpOworICAgICAgICAgICAgc291cmNlTGluay5zZXRB
dHRyaWJ1dGUoJ2hyZWYnLCBocmVmLnN1YnN0cihocmVmLmxhc3RJbmRleE9mKCdodHRwJykpKTsK
KyAgICAgICAgICAgIHNvdXJjZUxpbmtzLmlubmVySFRNTCA9IGhlYWRpbmcub3V0ZXJIVE1MICsg
c291cmNlTGluay5vdXRlckhUTUw7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBM
b2NhbGl6ZSBkZW1vIGxpbmtzCisgICAgICAgICAgICB2YXIgZGVtb0xpbmtzID0gYXNpZGUucXVl
cnlTZWxlY3RvckFsbCgnLmRlbW8tbGluaycpOworICAgICAgICAgICAgQXJyYXkucHJvdG90eXBl
LmZvckVhY2guY2FsbChkZW1vTGlua3MsIGZ1bmN0aW9uIChkZW1vTGluaykgeworICAgICAgICAg
ICAgICAgIGlmIChkZW1vTGluay5nZXRBdHRyaWJ1dGUoJ2hyZWYnKS5zdWJzdHIoMCwgNCkgIT09
ICdodHRwJykgeworICAgICAgICAgICAgICAgICAgICBkZW1vTGluay5zZXRBdHRyaWJ1dGUoJ2hy
ZWYnLCBmaW5kUm9vdCgpICsgZGVtb0xpbmsuZ2V0QXR0cmlidXRlKCdocmVmJykpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisKKyAgICAgICAgZG9jdW1l
bnQuYm9keS5jbGFzc05hbWUgPSAoZG9jdW1lbnQuYm9keS5jbGFzc05hbWUgKyAnIGxlYXJuLWJh
cicpLnRyaW0oKTsKKyAgICAgICAgZG9jdW1lbnQuYm9keS5pbnNlcnRBZGphY2VudEhUTUwoJ2Fm
dGVyQmVnaW4nLCBhc2lkZS5vdXRlckhUTUwpOworICAgIH07CisKKyAgICBMZWFybi5wcm90b3R5
cGUuZmV0Y2hJc3N1ZUNvdW50ID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgaXNzdWVMaW5r
ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lzc3VlLWNvdW50LWxpbmsnKTsKKyAgICAgICAg
aWYgKGlzc3VlTGluaykgeworICAgICAgICAgICAgdmFyIHVybCA9IGlzc3VlTGluay5ocmVmLnJl
cGxhY2UoJ2h0dHBzOi8vZ2l0aHViLmNvbScsICdodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9z
Jyk7CisgICAgICAgICAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisgICAgICAg
ICAgICB4aHIub3BlbignR0VUJywgdXJsLCB0cnVlKTsKKyAgICAgICAgICAgIHhoci5vbmxvYWQg
PSBmdW5jdGlvbiAoZSkgeworICAgICAgICAgICAgICAgIHZhciBwYXJzZWRSZXNwb25zZSA9IEpT
T04ucGFyc2UoZS50YXJnZXQucmVzcG9uc2VUZXh0KTsKKyAgICAgICAgICAgICAgICBpZiAocGFy
c2VkUmVzcG9uc2UgaW5zdGFuY2VvZiBBcnJheSkgeworICAgICAgICAgICAgICAgICAgICB2YXIg
Y291bnQgPSBwYXJzZWRSZXNwb25zZS5sZW5ndGg7CisgICAgICAgICAgICAgICAgICAgIGlmIChj
b3VudCAhPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaXNzdWVMaW5rLmlubmVySFRN
TCA9ICdUaGlzIGFwcCBoYXMgJyArIGNvdW50ICsgJyBvcGVuIGlzc3Vlcyc7CisgICAgICAgICAg
ICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaXNzdWUtY291bnQnKS5zdHls
ZS5kaXNwbGF5ID0gJ2lubGluZSc7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9OworICAgICAgICAgICAgeGhyLnNlbmQoKTsKKyAgICAgICAg
fQorICAgIH07CisKKyAgICByZWRpcmVjdCgpOworICAgIGdldEZpbGUoJ2xlYXJuLmpzb24nLCBM
ZWFybik7Cit9KSgpOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9y
ZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvaW5mZXJuby9ub2RlX21vZHVs
ZXMvdG9kb212Yy1jb21tb24vcGFja2FnZS5qc29uIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9t
ZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvaW5mZXJuby9ub2Rl
X21vZHVsZXMvdG9kb212Yy1jb21tb24vcGFja2FnZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU3YzZjNWZk
ZjY1NjJiNWU5OGMzNWE3YzAwMjNmYjUyMzY5ZTUyMTkKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJm
b3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1l
eGFtcGxlcy9pbmZlcm5vL25vZGVfbW9kdWxlcy90b2RvbXZjLWNvbW1vbi9wYWNrYWdlLmpzb24K
QEAgLTAsMCArMSwyMCBAQAoreworICAibmFtZSI6ICJ0b2RvbXZjLWNvbW1vbiIsCisgICJ2ZXJz
aW9uIjogIjEuMC4zIiwKKyAgImRlc2NyaXB0aW9uIjogIkNvbW1vbiBUb2RvTVZDIHV0aWxpdGll
cyB1c2VkIGJ5IG91ciBhcHBzIiwKKyAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgInJlcG9zaXRvcnki
OiAidGFzdGVqcy90b2RvbXZjLWNvbW1vbiIsCisgICJhdXRob3IiOiAiVGFzdGVKUyIsCisgICJt
YWluIjogImJhc2UuanMiLAorICAic3R5bGUiOiAiYmFzZS5jc3MiLAorICAiZmlsZXMiOiBbCisg
ICAgImJhc2UuanMiLAorICAgICJiYXNlLmNzcyIKKyAgXSwKKyAgImtleXdvcmRzIjogWworICAg
ICJ0b2RvbXZjIiwKKyAgICAidGFzdGVqcyIsCisgICAgInV0aWwiLAorICAgICJ1dGlsaXRpZXMi
CisgIF0KK30KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2luZmVybm8vbm9kZV9tb2R1bGVzL3Rv
ZG9tdmMtY29tbW9uL3JlYWRtZS5tZCBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVz
b3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2luZmVybm8vbm9kZV9tb2R1bGVz
L3RvZG9tdmMtY29tbW9uL3JlYWRtZS5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43YTVkZTUxMThmM2ZjNzc1OGU4
ZGRjMGE2ODY4NzQ5Y2VlOWNhZjk1Ci0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0
cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvaW5m
ZXJuby9ub2RlX21vZHVsZXMvdG9kb212Yy1jb21tb24vcmVhZG1lLm1kCkBAIC0wLDAgKzEsMTUg
QEAKKyMgdG9kb212Yy1jb21tb24KKworPiBDb21tb24gVG9kb01WQyB1dGlsaXRpZXMgdXNlZCBi
eSBvdXIgYXBwcworCisKKyMjIEluc3RhbGwKKworYGBgCiskIG5wbSBpbnN0YWxsIC0tc2F2ZSB0
b2RvbXZjLWNvbW1vbgorYGBgCisKKworIyMgTGljZW5zZQorCitNSVQgwqkgW1Rhc3RlSlNdKGh0
dHA6Ly90YXN0ZWpzLmNvbSkKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0
ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2luZmVybm8vcGFja2Fn
ZS5qc29uIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9h
cmNoaXRlY3R1cmUtZXhhbXBsZXMvaW5mZXJuby9wYWNrYWdlLmpzb24KbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDc1
ZWQ1MjdiMGE3M2VhNWJjM2FkNzE3ZjhlOTgwNTE4NDY5OWVjNQotLS0gL2Rldi9udWxsCisrKyBi
L1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0
dXJlLWV4YW1wbGVzL2luZmVybm8vcGFja2FnZS5qc29uCkBAIC0wLDAgKzEsMjQgQEAKK3sKKyAg
InByaXZhdGUiOiB0cnVlLAorICAic2NyaXB0cyI6IHsKKyAgICAiZGV2IjogIndlYnBhY2stZGV2
LXNlcnZlciIsCisgICAgImJ1aWxkIjogIndlYnBhY2sgLXAiLAorICAgICJ0ZXN0IjogImNkIHRl
c3QgJiYgbnBtIHRlc3QiCisgIH0sCisgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgImluZmVybm8i
OiAiYmV0YTMyIiwKKyAgICAiaW5mZXJuby1jb21wb25lbnQiOiAiYmV0YTMyIiwKKyAgICAidG9k
b212Yy1hcHAtY3NzIjogIl4yLjAuMCIsCisgICAgInRvZG9tdmMtY29tbW9uIjogIl4xLjAuMCIK
KyAgfSwKKyAgImRldkRlcGVuZGVuY2llcyI6IHsKKyAgICAiYmFiZWwtY29yZSI6ICJeNi41LjIi
LAorICAgICJiYWJlbC1sb2FkZXIiOiAiXjYuMi4xIiwKKyAgICAiYmFiZWwtcGx1Z2luLWluZmVy
bm8iOiAiYmV0YTEzIiwKKyAgICAiYmFiZWwtcHJlc2V0LWVzMjAxNSI6ICJeNi41LjAiLAorICAg
ICJiYWJlbC1wcmVzZXQtZXMyMDE1LWxvb3NlIjogIl43LjAuMCIsCisgICAgImJhYmVsLXByZXNl
dC1zdGFnZS0wIjogIl42LjUuMCIsCisgICAgIndlYnBhY2siOiAiXjEuMTIuMTQiLAorICAgICJ3
ZWJwYWNrLWRldi1zZXJ2ZXIiOiAiXjEuMTQuMSIKKyAgfQorfQpkaWZmIC0tZ2l0IGEvUGVyZm9y
bWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhh
bXBsZXMvaW5mZXJuby9zcmMvYmFzZS5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIv
cmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2luZmVybm8vc3JjL2Jhc2Uu
anMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uODlhMmNhMzBjOGI0OTI0ZmNhZDIzZTc3OTNlMTgwZGRjNTkxODU5Ygot
LS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2Vz
L3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2luZmVybm8vc3JjL2Jhc2UuanMKQEAgLTAs
MCArMSw0OSBAQAoraW1wb3J0IEluZmVybm8gZnJvbSAnaW5mZXJubyc7CitpbXBvcnQgeyBzdGF0
ZXMgfSBmcm9tICcuL3NoYXJlJzsKKworLyoqCisgKiBTdGF0ZWxlc3MgSGVhZGVyIGNvbXBvbmVu
dAorICovCitleHBvcnQgZnVuY3Rpb24gSGVhZCh7b25FbnRlcn0pIHsKKyAgICByZXR1cm4gKAor
ICAgICAgICA8aGVhZGVyIGNsYXNzTmFtZT0iaGVhZGVyIj4KKyAgICAgICAgICAgIDxoMT50b2Rv
czwvaDE+CisgICAgICAgICAgICA8aW5wdXQgY2xhc3NOYW1lPSJuZXctdG9kbyIgYXV0b2ZvY3Vz
IG9ua2V5ZG93bj17IG9uRW50ZXIgfQorICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT0ib2Zm
IiBwbGFjZWhvbGRlcj0iV2hhdCBuZWVkcyB0byBiZSBkb25lPyIKKyAgICAgICAgICAgIC8+Cisg
ICAgICAgIDwvaGVhZGVyPgorICAgICk7Cit9CisKK2V4cG9ydCBjb25zdCBsaW5rcyA9IFsKKyAg
ICB7aGFzaDogJyMvJywgbmFtZTogJ0FsbCd9LAorICAgIHtoYXNoOiAnIy9hY3RpdmUnLCBuYW1l
OiAnQWN0aXZlJ30sCisgICAge2hhc2g6ICcjL2NvbXBsZXRlZCcsIG5hbWU6ICdDb21wbGV0ZWQn
fQorXTsKKworLyoqCisgKiBTdGF0ZWxlc3MgRm9vdGVyIGNvbXBvbmVudAorICovCitleHBvcnQg
ZnVuY3Rpb24gRm9vdCh7bGVmdCwgZG9uZSwgcm91dGUsIG9uQ2xlYXJ9KSB7CisgICAgcmV0dXJu
ICgKKyAgICAgICAgPGZvb3RlciBjbGFzc05hbWU9ImZvb3RlciI+CisgICAgICAgICAgICAgICAg
PHNwYW4gY2xhc3NOYW1lPSJ0b2RvLWNvdW50Ij4KKyAgICAgICAgICAgICAgICAgICAgPHN0cm9u
Zz57IGxlZnQgfTwvc3Ryb25nPiB7IGxlZnQgPiAxID8gJ2l0ZW1zJyA6ICdpdGVtJyB9IGxlZnQK
KyAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgPHVsIGNsYXNzTmFtZT0i
ZmlsdGVycyI+CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGxpbmtzLm1hcCgoe2hhc2gsIG5hbWV9KSA9PiAoCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPGxpPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPXsgaGFzaCB9
IGNsYXNzTmFtZT17IG5hbWUudG9Mb3dlckNhc2UoKSA9PT0gcm91dGUgPyAnc2VsZWN0ZWQnIDog
JycgfT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZSB9CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA8L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgKSkKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICAgICAgICAgICAgeyBkb25lID4gMCA/
ICgKKyAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9ImNsZWFyLWNvbXBsZXRl
ZCIgb25DbGljaz17IG9uQ2xlYXIgfT5DbGVhciBjb21wbGV0ZWQ8L2J1dHRvbj4KKyAgICAgICAg
ICAgICAgICApIDogbnVsbCB9CisgICAgICAgICAgICA8L2Zvb3Rlcj4KKyAgICApOworfQpkaWZm
IC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9h
cmNoaXRlY3R1cmUtZXhhbXBsZXMvaW5mZXJuby9zcmMvaW5kZXguanMgYi9QZXJmb3JtYW5jZVRl
c3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9p
bmZlcm5vL3NyYy9pbmRleC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NzQxNGMwYjM4NzE5MTlhNzM5OTk2OGM2
ZmIxMmQ3YWViMWQyMzM5Ci0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvaW5mZXJuby9z
cmMvaW5kZXguanMKQEAgLTAsMCArMSwxMTIgQEAKK2ltcG9ydCBJbmZlcm5vIGZyb20gJ2luZmVy
bm8nOworaW1wb3J0IENvbXBvbmVudCBmcm9tICdpbmZlcm5vLWNvbXBvbmVudCc7CitpbXBvcnQg
eyBFTlRFUiwgZmlsdGVycywgcmVhZCB9IGZyb20gJy4vc2hhcmUnOworaW1wb3J0IHsgSGVhZCwg
Rm9vdCB9IGZyb20gJy4vYmFzZSc7CitpbXBvcnQgTW9kZWwgZnJvbSAnLi9tb2RlbCc7CitpbXBv
cnQgSXRlbSBmcm9tICcuL2l0ZW0nOworCitjb25zdCB7IHJlbmRlciB9ID0gSW5mZXJubzsKK2Nv
bnN0IG1vZGVsID0gbmV3IE1vZGVsKCk7CisKK2NsYXNzIEFwcCBleHRlbmRzIENvbXBvbmVudCB7
CisgICAgc3RhdGUgPSB7CisgICAgICAgIHJvdXRlOiByZWFkKCksCisgICAgICAgIHRvZG9zOiBt
b2RlbC5nZXQoKQorICAgIH07CisKKyAgICB1cGRhdGUgPSBhcnIgPT4gdGhpcy5zZXRTdGF0ZSh7
dG9kb3M6IGFycn0pOworCisgICAgY29tcG9uZW50V2lsbE1vdW50ID0gKCkgPT4geworICAgICAg
ICB3aW5kb3cub25oYXNoY2hhbmdlID0gKCkgPT4gdGhpcy5zZXRTdGF0ZSh7cm91dGU6IHJlYWQo
KX0pOworICAgIH07CisKKyAgICBhZGQgPSBlID0+IHsKKyAgICAgICAgaWYgKGUud2hpY2ggIT09
IEVOVEVSKSByZXR1cm47CisKKyAgICAgICAgY29uc3QgdmFsID0gZS50YXJnZXQudmFsdWUudHJp
bSgpOworICAgICAgICBpZiAoIXZhbCkgcmV0dXJuOworCisgICAgICAgIGUudGFyZ2V0LnZhbHVl
ID0gJyc7CisgICAgICAgIHRoaXMudXBkYXRlKAorICAgICAgICAgICAgbW9kZWwuYWRkKHZhbCkK
KyAgICAgICAgKTsKKyAgICB9OworCisgICAgZWRpdCA9ICh0b2RvLCB2YWwpID0+IHsKKyAgICAg
ICAgdmFsID0gdmFsLnRyaW0oKTsKKyAgICAgICAgaWYgKHZhbC5sZW5ndGgpIHsKKyAgICAgICAg
ICAgIHRoaXMudXBkYXRlKAorICAgICAgICAgICAgICAgIG1vZGVsLnB1dCh0b2RvLCB7dGl0bGU6
IHZhbCwgZWRpdGluZzogMH0pCisgICAgICAgICAgICApOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgdGhpcy5yZW1vdmUodG9kbyk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgZm9j
dXMgPSB0b2RvID0+IHRoaXMudXBkYXRlKAorICAgICAgICBtb2RlbC5wdXQodG9kbywge2VkaXRp
bmc6IDF9KQorICAgICk7CisKKyAgICBibHVyID0gdG9kbyA9PiB0aGlzLnVwZGF0ZSgKKyAgICAg
ICAgbW9kZWwucHV0KHRvZG8sIHtlZGl0aW5nOiAwfSkKKyAgICApOworCisgICAgcmVtb3ZlID0g
dG9kbyA9PiB0aGlzLnVwZGF0ZSgKKyAgICAgICAgbW9kZWwuZGVsKHRvZG8pCisgICAgKTsKKwor
ICAgIHRvZ2dsZU9uZSA9IHRvZG8gPT4gdGhpcy51cGRhdGUoCisgICAgICAgIG1vZGVsLnRvZ2ds
ZSh0b2RvKQorICAgICk7CisKKyAgICB0b2dnbGVBbGwgPSBldiA9PiB0aGlzLnVwZGF0ZSgKKyAg
ICAgICAgbW9kZWwudG9nZ2xlQWxsKGV2LnRhcmdldC5jaGVja2VkKQorICAgICk7CisKKyAgICBj
bGVhckNvbXBsZXRlZCA9ICgpID0+IHRoaXMudXBkYXRlKAorICAgICAgICBtb2RlbC5jbGVhckNv
bXBsZXRlZCgpCisgICAgKTsKKworICAgIHJlbmRlcihfLCB7dG9kb3MsIHJvdXRlfSkgeworICAg
ICAgICBjb25zdCBudW0gPSB0b2Rvcy5sZW5ndGg7CisgICAgICAgIGNvbnN0IHNob3duID0gdG9k
b3MuZmlsdGVyKGZpbHRlcnNbcm91dGVdKTsKKyAgICAgICAgY29uc3QgbnVtRG9uZSA9IHRvZG9z
LmZpbHRlcihmaWx0ZXJzLmNvbXBsZXRlZCkubGVuZ3RoOworICAgICAgICBjb25zdCBudW1BY3Qg
PSBudW0gLSBudW1Eb25lOworCisgICAgICAgIHJldHVybiAoCisgICAgICAgICAgICA8ZGl2Pgor
ICAgICAgICAgICAgICAgIDxIZWFkIG9uRW50ZXI9eyB0aGlzLmFkZCB9IC8+CisKKyAgICAgICAg
ICAgICAgICB7IG51bSA/ICgKKyAgICAgICAgICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3NOYW1l
PSJtYWluIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzc05hbWU9InRvZ2ds
ZS1hbGwiIHR5cGU9ImNoZWNrYm94IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xp
Y2s9eyB0aGlzLnRvZ2dsZUFsbCB9IGNoZWNrZWQ9eyBudW1BY3QgPT09IDAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgLz4KKworICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzTmFt
ZT0idG9kby1saXN0Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNob3duLm1hcCh0ID0+CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA8SXRlbSBkYXRhPXt0fQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG9uQmx1cj17ICgpID0+IHRoaXMuYmx1cih0KSB9CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Gb2N1cz17ICgpID0+IHRoaXMuZm9jdXMo
dCkgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvRGVsZXRlPXsg
KCkgPT4gdGhpcy5yZW1vdmUodCkgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRvU2F2ZT17IHZhbCA9PiB0aGlzLmVkaXQodCwgdmFsKSB9CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9Ub2dnbGU9eyAoKSA9PiB0aGlzLnRvZ2dsZU9u
ZSh0KSB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgICAgICAgICAgICAgICAgPC9zZWN0
aW9uPgorICAgICAgICAgICAgICAgICkgOiBudWxsIH0KKworICAgICAgICAgICAgICAgIHsgKG51
bUFjdCB8fCBudW1Eb25lKSA/ICgKKyAgICAgICAgICAgICAgICAgICAgPEZvb3Qgb25DbGVhcj17
IHRoaXMuY2xlYXJDb21wbGV0ZWQgfQorICAgICAgICAgICAgICAgICAgICAgICAgbGVmdD17bnVt
QWN0fSBkb25lPXtudW1Eb25lfSByb3V0ZT17cm91dGV9CisgICAgICAgICAgICAgICAgICAgIC8+
CisgICAgICAgICAgICAgICAgKSA6IG51bGwgfQorICAgICAgICAgICAgPC9kaXY+CisgICAgICAg
ICkKKyAgICB9Cit9CisKK3JlbmRlcig8QXBwIC8+LCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
YXBwJykpOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJj
ZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvaW5mZXJuby9zcmMvaXRlbS5qcyBiL1Bl
cmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJl
LWV4YW1wbGVzL2luZmVybm8vc3JjL2l0ZW0uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTdmOGIxZDBlOGIwOTBi
OTZjNjg1YTk3MTEwODlkOWRjMDAzODNkOAotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNl
VGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVz
L2luZmVybm8vc3JjL2l0ZW0uanMKQEAgLTAsMCArMSw1OCBAQAoraW1wb3J0IEluZmVybm8gZnJv
bSAnaW5mZXJubyc7CitpbXBvcnQgQ29tcG9uZW50IGZyb20gJ2luZmVybm8tY29tcG9uZW50JzsK
K2ltcG9ydCB7IEVTQ0FQRSwgRU5URVIsIGlzRXF1YWwgfSBmcm9tICcuL3NoYXJlJzsKKworZXhw
b3J0IGRlZmF1bHQgY2xhc3MgSXRlbSBleHRlbmRzIENvbXBvbmVudCB7CisgICAgY29uc3RydWN0
b3Ioe2RhdGEsIC4uLnByb3BzfSkgeworICAgICAgICBzdXBlcihwcm9wcyk7CisgICAgICAgIHRo
aXMudG9kbyA9IGRhdGE7CisgICAgICAgIHRoaXMuc3RhdGUgPSB7dGV4dDogZGF0YS50aXRsZX07
CisgICAgICAgIHRoaXMuZWRpdG9yID0gbnVsbDsKKyAgICB9CisKKyAgICBjb21wb25lbnRXaWxs
UmVjZWl2ZVByb3BzID0gKHtkYXRhfSkgPT4gdGhpcy5zZXRUZXh0KGRhdGEudGl0bGUpOworICAg
IHNob3VsZENvbXBvbmVudFVwZGF0ZSA9ICh7ZGF0YX0sIHt0ZXh0fSkgPT4gIShpc0VxdWFsKGRh
dGEsIHRoaXMudG9kbykgJiYgdGV4dCA9PT0gdGhpcy5zdGF0ZS50ZXh0KTsKKyAgICBjb21wb25l
bnRXaWxsVXBkYXRlID0gKHtkYXRhfSkgPT4gKHRoaXMudG9kbyA9IGRhdGEpOworICAgIGNvbXBv
bmVudERpZFVwZGF0ZSA9ICgpID0+IHRoaXMuZWRpdG9yLmZvY3VzKCk7CisKKyAgICBzZXRUZXh0
ID0gdGV4dCA9PiB0aGlzLnNldFN0YXRlKHt0ZXh0fSk7CisKKyAgICByZW5kZXIoe2RvVG9nZ2xl
LCBkb0RlbGV0ZSwgZG9TYXZlLCBvbkJsdXIsIG9uRm9jdXN9LCB7dGV4dH0pIHsKKyAgICAgICAg
Y29uc3Qge3RpdGxlLCBjb21wbGV0ZWQsIGVkaXRpbmd9ID0gdGhpcy50b2RvOworCisgICAgICAg
IGNvbnN0IGNscyA9IFtdOworICAgICAgICBlZGl0aW5nICYmIGNscy5wdXNoKCdlZGl0aW5nJyk7
CisgICAgICAgIGNvbXBsZXRlZCAmJiBjbHMucHVzaCgnY29tcGxldGVkJyk7CisKKyAgICAgICAg
Y29uc3QgaGFuZGxlS2V5ZG93biA9IGUgPT4geworICAgICAgICAgICAgaWYgKGUud2hpY2ggPT09
IEVTQ0FQRSkgcmV0dXJuIG9uQmx1cigpOworICAgICAgICAgICAgaWYgKGUud2hpY2ggPT09IEVO
VEVSKSByZXR1cm4gZG9TYXZlKHRleHQpOworICAgICAgICB9OworCisgICAgICAgIC8vIHRtcCBm
aXgKKyAgICAgICAgY29uc3QgaGFuZGxlQmx1ciA9ICgpID0+IGRvU2F2ZSh0ZXh0KTsKKyAgICAg
ICAgY29uc3QgaGFuZGxlSW5wdXQgPSBlID0+IHRoaXMuc2V0VGV4dChlLnRhcmdldC52YWx1ZSk7
CisKKyAgICAgICAgcmV0dXJuICgKKyAgICAgICAgICAgIDxsaSBjbGFzc05hbWU9eyBjbHMuam9p
bignICcpIH0+CisgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9InZpZXciPgorICAgICAg
ICAgICAgICAgICAgICA8aW5wdXQgY2xhc3NOYW1lPSJ0b2dnbGUiIHR5cGU9ImNoZWNrYm94Igor
ICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZD17IGNvbXBsZXRlZCB9IG9uQ2xpY2s9eyBk
b1RvZ2dsZSB9CisgICAgICAgICAgICAgICAgICAgIC8+CisKKyAgICAgICAgICAgICAgICAgICAg
PGxhYmVsIG9uZGJsY2xpY2s9eyBvbkZvY3VzIH0+eyB0aXRsZSB9PC9sYWJlbD4KKworICAgICAg
ICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT0iZGVzdHJveSIgb25DbGljaz17IGRvRGVs
ZXRlIH0+PC9idXR0b24+CisgICAgICAgICAgICAgICAgPC9kaXY+CisKKyAgICAgICAgICAgICAg
ICA8aW5wdXQgY2xhc3NOYW1lPSJlZGl0IgorICAgICAgICAgICAgICAgICAgICByZWY9e2VsID0+
IHsgdGhpcy5lZGl0b3IgPSBlbCB9fQorICAgICAgICAgICAgICAgICAgICB2YWx1ZT17IGVkaXRp
bmcgJiYgdGV4dCB9CisgICAgICAgICAgICAgICAgICAgIG9uYmx1cj17IGhhbmRsZUJsdXIgfQor
ICAgICAgICAgICAgICAgICAgICBvbmlucHV0PXsgaGFuZGxlSW5wdXQgfQorICAgICAgICAgICAg
ICAgICAgICBvbmtleWRvd249eyBoYW5kbGVLZXlkb3duIH0KKyAgICAgICAgICAgICAgICAvPgor
ICAgICAgICAgICAgPC9saT4KKyAgICAgICAgKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9QZXJm
b3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1l
eGFtcGxlcy9pbmZlcm5vL3NyYy9tb2RlbC5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0
ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2luZmVybm8vc3JjL21v
ZGVsLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjUyZWFmNDY2MzVhZGNiNzNlZmU1OWQ1ZThkZWI0MGUxNWQ3NDA2
MjQKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291
cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9pbmZlcm5vL3NyYy9tb2RlbC5qcwpA
QCAtMCwwICsxLDM2IEBACitpbXBvcnQgeyBhc3NpZ24sIGlzRXF1YWwgfSBmcm9tICcuL3NoYXJl
JzsKKworY29uc3QgU1RPUiA9IHt9OworY29uc3QgU1RPUl9JRCA9ICd0b2Rvcy1pbmZlcm5vJzsK
KworZXhwb3J0IGRlZmF1bHQgY2xhc3MgTW9kZWwgeworICAgIGdldCA9ICgpID0+ICh0aGlzLmRh
dGEgPSBKU09OLnBhcnNlKFNUT1JbU1RPUl9JRF0gfHwgJ1tdJykpCisKKyAgICBzZXQgPSBhcnIg
PT4geworICAgICAgICB0aGlzLmRhdGEgPSBhcnIgfHwgdGhpcy5kYXRhIHx8IFtdOworICAgICAg
ICBTVE9SW1NUT1JfSURdID0gSlNPTi5zdHJpbmdpZnkodGhpcy5kYXRhKTsKKyAgICAgICAgcmV0
dXJuIHRoaXMuZGF0YTsKKyAgICB9CisKKyAgICBhZGQgPSBzdHIgPT4gdGhpcy5zZXQoCisgICAg
ICAgIHRoaXMuZGF0YS5jb25jYXQoe3RpdGxlOiBzdHIsIGNvbXBsZXRlZDogZmFsc2V9KQorICAg
ICkKKworICAgIHB1dCA9ICh0b2RvLCBvYmopID0+IHRoaXMuc2V0KAorICAgICAgICB0aGlzLmRh
dGEubWFwKHQgPT4gaXNFcXVhbCh0LCB0b2RvKSA/IGFzc2lnbih0b2RvLCBvYmopIDogdCkKKyAg
ICApCisKKyAgICBkZWwgPSB0b2RvID0+IHRoaXMuc2V0KAorICAgICAgICB0aGlzLmRhdGEuZmls
dGVyKHQgPT4gIWlzRXF1YWwodCwgdG9kbykpCisgICAgKQorCisgICAgdG9nZ2xlID0gdG9kbyA9
PiB0aGlzLnB1dCh0b2RvLCB7Y29tcGxldGVkOiAhdG9kby5jb21wbGV0ZWR9KQorCisgICAgdG9n
Z2xlQWxsID0gY29tcGxldGVkID0+IHRoaXMuc2V0KAorICAgICAgICB0aGlzLmRhdGEubWFwKHQg
PT4gKHsuLi50LCBjb21wbGV0ZWR9KSkKKyAgICApCisKKyAgICBjbGVhckNvbXBsZXRlZCA9ICgp
ID0+IHRoaXMuc2V0KAorICAgICAgICB0aGlzLmRhdGEuZmlsdGVyKHQgPT4gIXQuY29tcGxldGVk
KQorICAgICkKK30KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVz
b3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2luZmVybm8vc3JjL3NoYXJlLmpz
IGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRl
Y3R1cmUtZXhhbXBsZXMvaW5mZXJuby9zcmMvc2hhcmUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWU3ZDk2MmI4
ZjE3NzQ3MDJkNzY1NDZjYTEwOWFkOTc5MjQ0YTNlMAotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZv
cm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4
YW1wbGVzL2luZmVybm8vc3JjL3NoYXJlLmpzCkBAIC0wLDAgKzEsNTggQEAKKy8qKgorICogU2hh
cmVkIGZ1bmNzL3ZhbHVlcworICovCisKK2V4cG9ydCBjb25zdCBFTlRFUiA9IDEzOworZXhwb3J0
IGNvbnN0IEVTQ0FQRSA9IDI3OworCitleHBvcnQgY29uc3QgZmlsdGVycyA9IHsKKyAgICBhbGw6
IHQgPT4gdHJ1ZSwKKyAgICBhY3RpdmU6IHQgPT4gIXQuY29tcGxldGVkLAorICAgIGNvbXBsZXRl
ZDogdCA9PiB0LmNvbXBsZXRlZAorfQorCisvKioKKyAqIFJlYWQgdGhlIGBsb2NhdGlvbi5oYXNo
YCB2YWx1ZQorICogQHJldHVybiB7U3RyaW5nfQorICovCitleHBvcnQgZnVuY3Rpb24gcmVhZCgp
IHsKKyAgICByZXR1cm4gbG9jYXRpb24uaGFzaC5yZXBsYWNlKCcjLycsICcnKSB8fCAnYWxsJzsK
K30KKworLyoqCisgKiBNb2RpZmllZCBgT2JqZWN0LmFzc2lnbmAgc2hpbQorICogLSBhbHdheXMg
d3JpdGVzIHRvIG5ldyBvYmplY3QKKyAqIEByZXR1cm4ge09iamVjdH0KKyAqLworZXhwb3J0IGZ1
bmN0aW9uIGFzc2lnbigpIHsKKyAgICBsZXQgc3JjOworICAgIGxldCB0YXIgPSB7fTsKKyAgICBm
b3IgKGxldCBzID0gMDsgcyA8IGFyZ3VtZW50cy5sZW5ndGg7IHMrKykgeworICAgICAgICBzcmMg
PSBPYmplY3QoYXJndW1lbnRzW3NdKTsKKyAgICAgICAgZm9yIChjb25zdCBrIGluIHNyYykgewor
ICAgICAgICAgICAgdGFyW2tdID0gc3JjW2tdOworICAgICAgICB9CisgICAgfQorICAgIHJldHVy
biB0YXI7Cit9CisKKy8qKgorICogQXJlIHR3byBPYmplY3RzIGVxdWFsIHZhbHVlcz8KKyAqIEBw
YXJhbSAge09iamVjdH0gYQorICogQHBhcmFtICB7T2JqZWN0fSBiCisgKiBAcmV0dXJuIHtCb29s
ZWFufQorICovCitleHBvcnQgZnVuY3Rpb24gaXNFcXVhbChhLCBiKSB7CisgICAgLy8gQ3JlYXRl
IGFycmF5cyBvZiBwcm9wZXJ0eSBuYW1lcworICAgIGNvbnN0IGFQcm9wcyA9IE9iamVjdC5nZXRP
d25Qcm9wZXJ0eU5hbWVzKGEpOworICAgIGNvbnN0IGJQcm9wcyA9IE9iamVjdC5nZXRPd25Qcm9w
ZXJ0eU5hbWVzKGIpOworCisgICAgaWYgKGFQcm9wcy5sZW5ndGggIT09IGJQcm9wcy5sZW5ndGgp
IHJldHVybiBmYWxzZTsKKworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYVByb3BzLmxlbmd0aDsg
aSsrKSB7CisgICAgICAgIGNvbnN0IGsgPSBhUHJvcHNbaV07CisgICAgICAgIGlmIChhW2tdICE9
PSBiW2tdKSByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CmRpZmYg
LS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2Fy
Y2hpdGVjdHVyZS1leGFtcGxlcy9pbmZlcm5vL3dlYnBhY2suY29uZmlnLmpzIGIvUGVyZm9ybWFu
Y2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBs
ZXMvaW5mZXJuby93ZWJwYWNrLmNvbmZpZy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jN2IzZTZmN2ZkNjhiYmM2
OTNmMmUzODVjMGNlMjFhZDQzZTA0NWJkCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VU
ZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMv
aW5mZXJuby93ZWJwYWNrLmNvbmZpZy5qcwpAQCAtMCwwICsxLDMxIEBACitjb25zdCB3ZWJwYWNr
ID0gcmVxdWlyZSgnd2VicGFjaycpOworCittb2R1bGUuZXhwb3J0cyA9IHsKKyAgICBlbnRyeTog
Jy4vc3JjL2luZGV4LmpzJywKKyAgICBvdXRwdXQ6IHsKKyAgICAgICAgcGF0aDogJy4vZGlzdCcs
CisgICAgICAgIHB1YmxpY1BhdGg6ICdkaXN0JywKKyAgICAgICAgZmlsZW5hbWU6ICdidW5kbGUu
anMnCisgICAgfSwKKyAgICBtb2R1bGU6IHsKKyAgICAgICAgbG9hZGVyczogW3sKKyAgICAgICAg
ICAgIHRlc3Q6IC9cLmpzeD8kLywKKyAgICAgICAgICAgIGV4Y2x1ZGU6IC9ub2RlX21vZHVsZXMv
LAorICAgICAgICAgICAgbG9hZGVyOiAnYmFiZWwnLAorICAgICAgICAgICAgcXVlcnk6IHsKKyAg
ICAgICAgICAgICAgICBwcmVzZXRzOiBbJ2VzMjAxNS1sb29zZScsICdzdGFnZS0wJ10sCisgICAg
ICAgICAgICAgICAgcGx1Z2luczogWydzeW50YXgtanN4JywgJ2luZmVybm8nXQorICAgICAgICAg
ICAgfQorICAgICAgICB9XQorICAgIH0sCisgICAgcGx1Z2luczogWworICAgICAgICBuZXcgd2Vi
cGFjay5EZWZpbmVQbHVnaW4oeworICAgICAgICAgICAgJ3Byb2Nlc3MuZW52JzogeworICAgICAg
ICAgICAgICAgICdOT0RFX0VOVic6IEpTT04uc3RyaW5naWZ5KCdwcm9kdWN0aW9uJykKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSksCisgICAgXSwKKyAgICBkZXZTZXJ2ZXI6IHsKKyAgICAgICAg
cG9ydDogcHJvY2Vzcy5lbnYuUE9SVCB8fCA4MDAwCisgICAgfQorfTsK
</data>
<flag name="review"
          id="331001"
          type_id="1"
          status="+"
          setter="rniwa"
    />
    <flag name="commit-queue"
          id="331002"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
      

    </bug>

</bugzilla>