<?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>99319</bug_id>
          
          <creation_ts>2012-10-15 06:27:20 -0700</creation_ts>
          <short_desc>Web Inspector: Update CodeMirror to v3</short_desc>
          <delta_ts>2012-11-08 07:42:54 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://codemirror.net</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>94056</blocked>
    
    <blocked>94062</blocked>
    
    <blocked>94118</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Jan Keromnes">janx</reporter>
          <assigned_to name="Pavel Feldman">pfeldman</assigned_to>
          <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>caseq</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>vsevik</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>742002</commentid>
    <comment_count>0</comment_count>
    <who name="Jan Keromnes">janx</who>
    <bug_when>2012-10-15 06:27:20 -0700</bug_when>
    <thetext>CodeMirror has a new version coming up, that should not only show still better performance, but it should also make the implementation of #94056 and #94062 fairly straightforward. As soon as v3 is stable enough, we should migrate our current CodeMirror code base to the new version.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756337</commentid>
    <comment_count>1</comment_count>
      <attachid>171873</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-11-01 09:23:46 -0700</bug_when>
    <thetext>Created attachment 171873
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756388</commentid>
    <comment_count>2</comment_count>
      <attachid>171873</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-01 10:05:45 -0700</bug_when>
    <thetext>Comment on attachment 171873
Patch

Clearing flags on attachment: 171873

Committed r133189: &lt;http://trac.webkit.org/changeset/133189&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756389</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-01 10:05:49 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761751</commentid>
    <comment_count>4</comment_count>
    <who name="Jan Keromnes">janx</who>
    <bug_when>2012-11-08 07:09:36 -0800</bug_when>
    <thetext>Reopening to attach new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761752</commentid>
    <comment_count>5</comment_count>
      <attachid>173038</attachid>
    <who name="Jan Keromnes">janx</who>
    <bug_when>2012-11-08 07:09:44 -0800</bug_when>
    <thetext>Created attachment 173038
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761782</commentid>
    <comment_count>6</comment_count>
      <attachid>173038</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-11-08 07:39:33 -0800</bug_when>
    <thetext>Comment on attachment 173038
Patch

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

&gt; Source/WebCore/inspector/front-end/CodeMirrorTextEditor.js:-57
&gt; -    CodeMirror.on(this._codeMirror, &quot;change&quot;, this._change.bind(this));

Why this was wrong? It seems to work for me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761787</commentid>
    <comment_count>7</comment_count>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2012-11-08 07:42:54 -0800</bug_when>
    <thetext>Please create a new bug for each patch.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171873</attachid>
            <date>2012-11-01 09:23:46 -0700</date>
            <delta_ts>2012-11-08 07:09:30 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-99319-20121101202206.patch</filename>
            <type>text/plain</type>
            <size>301687</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMzMTUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDU1ODI1NDczYWNmYzE1
ZjFhZDBiZTc0ZGZmNWY3NjA4N2E5MTQ1MS4uN2UwZDZjYWJiM2VhODEwNzMxMjY0YjA1OGQ4ODI1
MzhmYzViZTJhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDkwIEBACiAyMDEyLTExLTAxICBQYXZl
bCBGZWxkbWFuICA8cGZlbGRtYW5AY2hyb21pdW0ub3JnPgogCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IFVwZGF0ZSBDb2RlTWlycm9yIHRvIHYzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05OTMxOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFVwZGF0ZWQgdG8gVG9UIHYzLgorCisgICAgICAgICogaW5zcGVj
dG9yL2Zyb250LWVuZC9Db2RlTWlycm9yVGV4dEVkaXRvci5qczoKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5Db2RlTWlycm9yVGV4dEVkaXRvcik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29kZU1p
cnJvclRleHRFZGl0b3IucHJvdG90eXBlLl9ndXR0ZXJDbGljayk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuQ29kZU1pcnJvclRleHRFZGl0b3IucHJvdG90eXBlLmFkZEJyZWFrcG9pbnQpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUZXh0RWRpdG9yLnByb3RvdHlwZS5yZW1vdmVC
cmVha3BvaW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVGV4dEVkaXRvci5w
cm90b3R5cGUuc2V0RXhlY3V0aW9uTGluZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29kZU1p
cnJvclRleHRFZGl0b3IucHJvdG90eXBlLmNsZWFyRXhlY3V0aW9uTGluZSk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRleHRFZGl0b3IucHJvdG90eXBlLmhpZ2hsaWdodExpbmUp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUZXh0RWRpdG9yLnByb3RvdHlwZS5j
bGVhckxpbmVIaWdobGlnaHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUZXh0
RWRpdG9yLnByb3RvdHlwZS5fY2hhbmdlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5k
L2NtL2NtZGV2dG9vbHMuY3NzOgorICAgICAgICAoLkNvZGVNaXJyb3IpOgorICAgICAgICAoLkNv
ZGVNaXJyb3ItbGluZW51bWJlcik6CisgICAgICAgICguY20tYnJlYWtwb2ludCk6CisgICAgICAg
ICogaW5zcGVjdG9yL2Zyb250LWVuZC9jbS9jb2RlbWlycm9yLmNzczoKKyAgICAgICAgKC5Db2Rl
TWlycm9yKToKKyAgICAgICAgKC5Db2RlTWlycm9yLXNjcm9sbCk6CisgICAgICAgICguQ29kZU1p
cnJvci1saW5lcyk6CisgICAgICAgICguQ29kZU1pcnJvciBwcmUpOgorICAgICAgICAoLkNvZGVN
aXJyb3Itc2Nyb2xsYmFyLWZpbGxlcik6CisgICAgICAgICguQ29kZU1pcnJvci1ndXR0ZXJzKToK
KyAgICAgICAgKC5Db2RlTWlycm9yLWxpbmVudW1iZXJzKToKKyAgICAgICAgKC5Db2RlTWlycm9y
LWxpbmVudW1iZXIpOgorICAgICAgICAoLkNvZGVNaXJyb3IgcHJlLkNvZGVNaXJyb3ItY3Vyc29y
KToKKyAgICAgICAgKC5Db2RlTWlycm9yIHByZS5Db2RlTWlycm9yLXNlY29uZGFyeWN1cnNvcik6
CisgICAgICAgICguY20ta2V5bWFwLWZhdC1jdXJzb3IgcHJlLkNvZGVNaXJyb3ItY3Vyc29yKToK
KyAgICAgICAgKC5jbS1rZXltYXAtZmF0LWN1cnNvciBwcmUuQ29kZU1pcnJvci1jdXJzb3I6bm90
KCNub25zZW5zZV9pZCkpOgorICAgICAgICAoLkNvZGVNaXJyb3IgcHJlLkNvZGVNaXJyb3ItY3Vy
c29yLkNvZGVNaXJyb3Itb3ZlcndyaXRlKToKKyAgICAgICAgKC5jbS1zLWRlZmF1bHQgLmNtLWtl
eXdvcmQpOgorICAgICAgICAoLmNtLXMtZGVmYXVsdCAuY20tYXRvbSk6CisgICAgICAgICguY20t
cy1kZWZhdWx0IC5jbS1udW1iZXIpOgorICAgICAgICAoLmNtLXMtZGVmYXVsdCAuY20tZGVmKToK
KyAgICAgICAgKC5jbS1zLWRlZmF1bHQgLmNtLXZhcmlhYmxlKToKKyAgICAgICAgKC5jbS1zLWRl
ZmF1bHQgLmNtLXZhcmlhYmxlLTIpOgorICAgICAgICAoLmNtLXMtZGVmYXVsdCAuY20tdmFyaWFi
bGUtMyk6CisgICAgICAgICguY20tcy1kZWZhdWx0IC5jbS1wcm9wZXJ0eSk6CisgICAgICAgICgu
Y20tcy1kZWZhdWx0IC5jbS1vcGVyYXRvcik6CisgICAgICAgICguY20tcy1kZWZhdWx0IC5jbS1j
b21tZW50KToKKyAgICAgICAgKC5jbS1zLWRlZmF1bHQgLmNtLXN0cmluZyk6CisgICAgICAgICgu
Y20tcy1kZWZhdWx0IC5jbS1zdHJpbmctMik6CisgICAgICAgICguY20tcy1kZWZhdWx0IC5jbS1t
ZXRhKToKKyAgICAgICAgKC5jbS1zLWRlZmF1bHQgLmNtLWVycm9yKToKKyAgICAgICAgKC5jbS1z
LWRlZmF1bHQgLmNtLXF1YWxpZmllcik6CisgICAgICAgICguY20tcy1kZWZhdWx0IC5jbS1idWls
dGluKToKKyAgICAgICAgKC5jbS1zLWRlZmF1bHQgLmNtLWJyYWNrZXQpOgorICAgICAgICAoLmNt
LXMtZGVmYXVsdCAuY20tdGFnKToKKyAgICAgICAgKC5jbS1zLWRlZmF1bHQgLmNtLWF0dHJpYnV0
ZSk6CisgICAgICAgICguY20tcy1kZWZhdWx0IC5jbS1oZWFkZXIpOgorICAgICAgICAoLmNtLXMt
ZGVmYXVsdCAuY20tcXVvdGUpOgorICAgICAgICAoLmNtLXMtZGVmYXVsdCAuY20taHIpOgorICAg
ICAgICAoLmNtLXMtZGVmYXVsdCAuY20tbGluayk6CisgICAgICAgICguY20taGVhZGVyLCAuY20t
c3Ryb25nKToKKyAgICAgICAgKC5jbS1lbSk6CisgICAgICAgICguY20tZW1zdHJvbmcpOgorICAg
ICAgICAoLmNtLWxpbmspOgorICAgICAgICAoLmNtLWludmFsaWRjaGFyKToKKyAgICAgICAgKGRp
di5Db2RlTWlycm9yIHNwYW4uQ29kZU1pcnJvci1tYXRjaGluZ2JyYWNrZXQpOgorICAgICAgICAo
ZGl2LkNvZGVNaXJyb3Igc3Bhbi5Db2RlTWlycm9yLW5vbm1hdGNoaW5nYnJhY2tldCk6CisgICAg
ICAgICguQ29kZU1pcnJvci1zaXplcik6CisgICAgICAgICguQ29kZU1pcnJvci12c2Nyb2xsYmFy
LCAuQ29kZU1pcnJvci1oc2Nyb2xsYmFyLCAuQ29kZU1pcnJvci1zY3JvbGxiYXItZmlsbGVyKToK
KyAgICAgICAgKC5Db2RlTWlycm9yLXZzY3JvbGxiYXIpOgorICAgICAgICAoLkNvZGVNaXJyb3It
aHNjcm9sbGJhcik6CisgICAgICAgICguQ29kZU1pcnJvci1ndXR0ZXIpOgorICAgICAgICAoLkNv
ZGVNaXJyb3ItZ3V0dGVyLWVsdCk6CisgICAgICAgICguQ29kZU1pcnJvci1saW5lYmFja2dyb3Vu
ZCk6CisgICAgICAgICguQ29kZU1pcnJvci1saW5ld2lkZ2V0KToKKyAgICAgICAgKC5Db2RlTWly
cm9yLW1lYXN1cmUpOgorICAgICAgICAoLkNvZGVNaXJyb3ItbWVhc3VyZSBwcmUpOgorICAgICAg
ICAoLkNvZGVNaXJyb3Itc2VsZWN0ZWQpOgorICAgICAgICAoLkNvZGVNaXJyb3ItZm9jdXNlZCAu
Q29kZU1pcnJvci1zZWxlY3RlZCk6CisgICAgICAgICguQ29kZU1pcnJvciBzcGFuKToKKyAgICAg
ICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL2NtL2NvZGVtaXJyb3IuanM6CisgICAgICAgICh3aW5k
b3cuQ29kZU1pcnJvci4pOgorICAgICAgICAod2luZG93LkNvZGVNaXJyb3IpOgorICAgICAgICAq
IGluc3BlY3Rvci9mcm9udC1lbmQvdXRpbGl0aWVzLmpzOgorCisyMDEyLTExLTAxICBQYXZlbCBG
ZWxkbWFuICA8cGZlbGRtYW5AY2hyb21pdW0ub3JnPgorCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6
IGludHJvZHVjZSBJbnNwZWN0b3IuZGV0YWNoZWQgbWVzc2FnZSBjb250YWluaW5nIHRlcm1pbmF0
aW9uIGNhdXNlLgogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTAwOTQ4CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvQ29kZU1pcnJvclRleHRFZGl0b3IuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL0NvZGVNaXJyb3JUZXh0RWRpdG9yLmpzCmluZGV4IGM0NTc4NGJlMDk2Mjc5MTdiNGM0
NjIxMjg0ZTY1YWQ3NDIxZmQwYmYuLmM3ZmUyZTJmOWU2NzIyYTdjNmE3YWNiODczYThiYjg0MmUz
NWUzZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ29k
ZU1pcnJvclRleHRFZGl0b3IuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9Db2RlTWlycm9yVGV4dEVkaXRvci5qcwpAQCAtNTIsMTAgKzUyLDEwIEBAIFdlYkluc3Bl
Y3Rvci5Db2RlTWlycm9yVGV4dEVkaXRvciA9IGZ1bmN0aW9uKHVybCwgZGVsZWdhdGUpCiAKICAg
ICB0aGlzLl9jb2RlTWlycm9yID0gd2luZG93LkNvZGVNaXJyb3IodGhpcy5lbGVtZW50LCB7CiAg
ICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLAotICAgICAgICBmaXhlZEd1dHRlcjogdHJ1ZSwKLSAg
ICAgICAgb25DaGFuZ2U6IHRoaXMuX29uQ2hhbmdlLmJpbmQodGhpcyksCi0gICAgICAgIG9uR3V0
dGVyQ2xpY2s6IHRoaXMuX29uR3V0dGVyQ2xpY2suYmluZCh0aGlzKQorICAgICAgICBndXR0ZXJz
OiBbIkNvZGVNaXJyb3ItbGluZW51bWJlcnMiLCAiYnJlYWtwb2ludHMiXQogICAgIH0pOworICAg
IENvZGVNaXJyb3Iub24odGhpcy5fY29kZU1pcnJvciwgImNoYW5nZSIsIHRoaXMuX2NoYW5nZS5i
aW5kKHRoaXMpKTsKKyAgICBDb2RlTWlycm9yLm9uKHRoaXMuX2NvZGVNaXJyb3IsICJndXR0ZXJD
bGljayIsIHRoaXMuX2d1dHRlckNsaWNrLmJpbmQodGhpcykpOwogCiAgICAgdGhpcy5fbGFzdFJh
bmdlID0gdGhpcy5yYW5nZSgpOwogCkBAIC0xMjAsNyArMTIwLDcgQEAgV2ViSW5zcGVjdG9yLkNv
ZGVNaXJyb3JUZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5fY29kZU1pcnJv
ci5zY3JvbGxUbyhjb29yZHMueCwgY29vcmRzLnkpOwogICAgIH0sCiAKLSAgICBfb25HdXR0ZXJD
bGljazogZnVuY3Rpb24oaW5zdGFuY2UsIGxpbmVOdW1iZXIsIGV2ZW50KQorICAgIF9ndXR0ZXJD
bGljazogZnVuY3Rpb24oaW5zdGFuY2UsIGxpbmVOdW1iZXIsIGd1dHRlciwgZXZlbnQpCiAgICAg
ewogICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuVGV4
dEVkaXRvci5FdmVudHMuR3V0dGVyQ2xpY2ssIHsgbGluZU51bWJlcjogbGluZU51bWJlciwgZXZl
bnQ6IGV2ZW50IH0pOwogICAgIH0sCkBAIC0xMzIsOCArMTMyLDEwIEBAIFdlYkluc3BlY3Rvci5D
b2RlTWlycm9yVGV4dEVkaXRvci5wcm90b3R5cGUgPSB7CiAgICAgICovCiAgICAgYWRkQnJlYWtw
b2ludDogZnVuY3Rpb24obGluZU51bWJlciwgZGlzYWJsZWQsIGNvbmRpdGlvbmFsKQogICAgIHsK
LSAgICAgICAgdmFyIGNsYXNzTmFtZSA9ICJjbS1icmVha3BvaW50IiArIChkaXNhYmxlZCA/ICIg
Y20tYnJlYWtwb2ludC1kaXNhYmxlZCIgOiAiIikgKyAoY29uZGl0aW9uYWwgPyAiIGNtLWJyZWFr
cG9pbnQtY29uZGl0aW9uYWwiIDogIiIpOwotICAgICAgICB0aGlzLl9jb2RlTWlycm9yLnNldE1h
cmtlcihsaW5lTnVtYmVyLCBudWxsLCBjbGFzc05hbWUpOworICAgICAgICB2YXIgZWxlbWVudCA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKyAgICAgICAgZWxlbWVudC50ZXh0Q29u
dGVudCA9IGxpbmVOdW1iZXIgKyAxOworICAgICAgICBlbGVtZW50LmNsYXNzTmFtZSA9ICJjbS1i
cmVha3BvaW50IiArIChkaXNhYmxlZCA/ICIgY20tYnJlYWtwb2ludC1kaXNhYmxlZCIgOiAiIikg
KyAoY29uZGl0aW9uYWwgPyAiIGNtLWJyZWFrcG9pbnQtY29uZGl0aW9uYWwiIDogIiIpOworICAg
ICAgICB0aGlzLl9jb2RlTWlycm9yLnNldEd1dHRlck1hcmtlcihsaW5lTnVtYmVyLCAiYnJlYWtw
b2ludHMiLCBlbGVtZW50KTsKICAgICB9LAogCiAgICAgLyoqCkBAIC0xNDEsNyArMTQzLDcgQEAg
V2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsKICAgICAgKi8K
ICAgICByZW1vdmVCcmVha3BvaW50OiBmdW5jdGlvbihsaW5lTnVtYmVyKQogICAgIHsKLSAgICAg
ICAgdGhpcy5fY29kZU1pcnJvci5jbGVhck1hcmtlcihsaW5lTnVtYmVyKTsKKyAgICAgICAgdGhp
cy5fY29kZU1pcnJvci5zZXRHdXR0ZXJNYXJrZXIobGluZU51bWJlciwgImJyZWFrcG9pbnRzIiwg
bnVsbCk7CiAgICAgfSwKIAogICAgIC8qKgpAQCAtMTQ5LDE0ICsxNTEsMTQgQEAgV2ViSW5zcGVj
dG9yLkNvZGVNaXJyb3JUZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsKICAgICAgKi8KICAgICBzZXRF
eGVjdXRpb25MaW5lOiBmdW5jdGlvbihsaW5lTnVtYmVyKQogICAgIHsKLSAgICAgICAgdGhpcy5f
ZXhlY3V0aW9uTGluZSA9IHRoaXMuX2NvZGVNaXJyb3IuZ2V0TGluZUhhbmRsZShsaW5lTnVtYmVy
KQotICAgICAgICB0aGlzLl9jb2RlTWlycm9yLnNldExpbmVDbGFzcyh0aGlzLl9leGVjdXRpb25M
aW5lLCBudWxsLCAiY20tZXhlY3V0aW9uLWxpbmUiKTsKKyAgICAgICAgdGhpcy5fZXhlY3V0aW9u
TGluZSA9IHRoaXMuX2NvZGVNaXJyb3IuZ2V0TGluZUhhbmRsZShsaW5lTnVtYmVyKTsKKyAgICAg
ICAgdGhpcy5fY29kZU1pcnJvci5hZGRMaW5lQ2xhc3ModGhpcy5fZXhlY3V0aW9uTGluZSwgbnVs
bCwgImNtLWV4ZWN1dGlvbi1saW5lIik7CiAgICAgfSwKIAogICAgIGNsZWFyRXhlY3V0aW9uTGlu
ZTogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgaWYgKHRoaXMuX2V4ZWN1dGlvbkxpbmUpCi0g
ICAgICAgICAgICB0aGlzLl9jb2RlTWlycm9yLnNldExpbmVDbGFzcyh0aGlzLl9leGVjdXRpb25M
aW5lLCBudWxsLCBudWxsKTsKKyAgICAgICAgICAgIHRoaXMuX2NvZGVNaXJyb3IucmVtb3ZlTGlu
ZUNsYXNzKHRoaXMuX2V4ZWN1dGlvbkxpbmUsIG51bGwsICJjbS1leGVjdXRpb24tbGluZSIpOwog
ICAgICAgICBkZWxldGUgdGhpcy5fZXhlY3V0aW9uTGluZTsKICAgICB9LAogCkBAIC0xOTQsNyAr
MTk2LDkgQEAgV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsK
ICAgICB7CiAgICAgICAgIHRoaXMuY2xlYXJMaW5lSGlnaGxpZ2h0KCk7CiAgICAgICAgIHRoaXMu
X2hpZ2hsaWdodGVkTGluZSA9IHRoaXMuX2NvZGVNaXJyb3IuZ2V0TGluZUhhbmRsZShsaW5lTnVt
YmVyKTsKLSAgICAgICAgdGhpcy5fY29kZU1pcnJvci5zZXRMaW5lQ2xhc3ModGhpcy5faGlnaGxp
Z2h0ZWRMaW5lLCBudWxsLCAiY20taGlnaGxpZ2h0Iik7CisgICAgICAgIGlmICghdGhpcy5faGln
aGxpZ2h0ZWRMaW5lKQorICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdGhpcy5fY29kZU1pcnJv
ci5hZGRMaW5lQ2xhc3ModGhpcy5faGlnaGxpZ2h0ZWRMaW5lLCBudWxsLCAiY20taGlnaGxpZ2h0
Iik7CiAgICAgICAgIHRoaXMuX2NsZWFySGlnaGxpZ2h0VGltZW91dCA9IHNldFRpbWVvdXQodGhp
cy5jbGVhckxpbmVIaWdobGlnaHQuYmluZCh0aGlzKSwgMjAwMCk7CiAgICAgfSwKIApAQCAtMjA0
LDggKzIwOCw4IEBAIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVGV4dEVkaXRvci5wcm90b3R5cGUg
PSB7CiAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fY2xlYXJIaWdobGlnaHRUaW1lb3V0
KTsKICAgICAgICAgZGVsZXRlIHRoaXMuX2NsZWFySGlnaGxpZ2h0VGltZW91dDsKIAotICAgICAg
ICBpZiAodGhpcy5faGlnaGxpZ2h0ZWRMaW5lKQotICAgICAgICAgICAgdGhpcy5fY29kZU1pcnJv
ci5zZXRMaW5lQ2xhc3ModGhpcy5faGlnaGxpZ2h0ZWRMaW5lLCBudWxsLCBudWxsKTsKKyAgICAg
ICAgIGlmICh0aGlzLl9oaWdobGlnaHRlZExpbmUpCisgICAgICAgICAgICB0aGlzLl9jb2RlTWly
cm9yLnJlbW92ZUxpbmVDbGFzcyh0aGlzLl9oaWdobGlnaHRlZExpbmUsIG51bGwsICJjbS1oaWdo
bGlnaHQiKTsKICAgICAgICAgZGVsZXRlIHRoaXMuX2hpZ2hsaWdodGVkTGluZTsKICAgICB9LAog
CkBAIC0yNDMsNyArMjQ3LDcgQEAgV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUZXh0RWRpdG9yLnBy
b3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJuIG5ld1JhbmdlOwogICAgIH0sCiAKLSAgICBfb25D
aGFuZ2U6IGZ1bmN0aW9uKCkKKyAgICBfY2hhbmdlOiBmdW5jdGlvbigpCiAgICAgewogICAgICAg
ICB2YXIgbmV3UmFuZ2UgPSB0aGlzLnJhbmdlKCk7CiAgICAgICAgIHRoaXMuX2RlbGVnYXRlLm9u
VGV4dENoYW5nZWQodGhpcy5fbGFzdFJhbmdlLCBuZXdSYW5nZSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2NtL2NtZGV2dG9vbHMuY3NzIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9jbS9jbWRldnRvb2xzLmNzcwppbmRleCAzZThi
ZTk3Y2MzNDNmOTE3OGZhZDQwYzEwNTIxODI0OGYwMDBmZmQ2Li41ZWQ0ZGQxZjhhMDczYjUzYjRj
MWU1M2E2NGQxOThlOTdjMDMxODE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL2NtL2NtZGV2dG9vbHMuY3NzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvY20vY21kZXZ0b29scy5jc3MKQEAgLTEsMTAgKzEsMTMgQEAKIC5Db2Rl
TWlycm9yIHsKICAgbGluZS1oZWlnaHQ6IDEuMmVtICFpbXBvcnRhbnQ7Ci19Ci0uQ29kZU1pcnJv
ci1zY3JvbGwgewogICBoZWlnaHQ6IDEwMCUgIWltcG9ydGFudDsKIH0KIAorLkNvZGVNaXJyb3It
bGluZW51bWJlciB7CisgIHBhZGRpbmctdG9wOiAxcHggIWltcG9ydGFudDsKKyAgbWluLXdpZHRo
OiAyMnB4ICFpbXBvcnRhbnQ7Cit9CisKIC5jbS1oaWdobGlnaHQgewogICAtd2Via2l0LWFuaW1h
dGlvbjogImZhZGVvdXQiIDJzIDBzOwogfQpAQCAtMTMsMTEgKzE2LDEzIEBACiAgICAgdG8geyBi
YWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsgfQogfQogLmNtLWJyZWFrcG9pbnQgewotICBjb2xvcjog
d2hpdGUgIWltcG9ydGFudDsKLSAgbWFyZ2luLXJpZ2h0OiAtOHB4ICFpbXBvcnRhbnQ7Ci0gIG1h
cmdpbi1sZWZ0OiAtNnB4ICFpbXBvcnRhbnQ7CisgIGNvbG9yOiB3aGl0ZTsKKyAgcG9zaXRpb246
IGFic29sdXRlOworICByaWdodDogM3B4OworICBtYXJnaW46IDAgLThweCAwIC02cHggIWltcG9y
dGFudDsKICAgYm9yZGVyLXdpZHRoOiAwIDhweCAwcHggMnB4ICFpbXBvcnRhbnQ7CiAgIC13ZWJr
aXQtYm9yZGVyLWltYWdlOiB1cmwoSW1hZ2VzL2JyZWFrcG9pbnRCb3JkZXIucG5nKSAxIDE0IDEg
MjsKKyAgcGFkZGluZzogMCAwIDFweCAxMDBweDsKIH0KIC5jbS1icmVha3BvaW50LWRpc2FibGVk
IHsKICAgb3BhY2l0eTogMC41OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9jbS9jb2RlbWlycm9yLmNzcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvY20vY29kZW1pcnJvci5jc3MKaW5kZXggZjBlOTFiMmQ3MzNhMTFmZmRhMWIwZTJm
ZjNiNTBhNGIzMGI1YmFjNC4uZWEwZWNlYTU5MjE3NGNkNTM3NzhjYWQ5OTU2MjQ0YzA4YWVjNGYw
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9jbS9jb2Rl
bWlycm9yLmNzcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2NtL2Nv
ZGVtaXJyb3IuY3NzCkBAIC0xLDE3MyArMSwyMzQgQEAKKy8qIEJBU0lDUyAqLworCiAuQ29kZU1p
cnJvciB7Ci0gIGxpbmUtaGVpZ2h0OiAxZW07CisgIC8qIFNldCBoZWlnaHQsIHdpZHRoLCBib3Jk
ZXJzLCBhbmQgZ2xvYmFsIGZvbnQgcHJvcGVydGllcyBoZXJlICovCiAgIGZvbnQtZmFtaWx5OiBt
b25vc3BhY2U7CisgIGhlaWdodDogMzAwcHg7Cit9CisuQ29kZU1pcnJvci1zY3JvbGwgeworICAv
KiBTZXQgc2Nyb2xsaW5nIGJlaGF2aW91ciBoZXJlICovCisgIG92ZXJmbG93OiBhdXRvOworfQor
CisvKiBQQURESU5HICovCisKKy5Db2RlTWlycm9yLWxpbmVzIHsKKyAgcGFkZGluZzogNHB4IDA7
IC8qIFZlcnRpY2FsIHBhZGRpbmcgYXJvdW5kIGNvbnRlbnQgKi8KK30KKy5Db2RlTWlycm9yIHBy
ZSB7CisgIHBhZGRpbmc6IDAgNHB4OyAvKiBIb3Jpem9udGFsIHBhZGRpbmcgb2YgY29udGVudCAq
LworfQorCisuQ29kZU1pcnJvci1zY3JvbGxiYXItZmlsbGVyIHsKKyAgYmFja2dyb3VuZC1jb2xv
cjogd2hpdGU7IC8qIFRoZSBsaXR0bGUgc3F1YXJlIGJldHdlZW4gSCBhbmQgViBzY3JvbGxiYXJz
ICovCit9CisKKy8qIEdVVFRFUiAqLworCisuQ29kZU1pcnJvci1ndXR0ZXJzIHsKKyAgYm9yZGVy
LXJpZ2h0OiAxcHggc29saWQgI2RkZDsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2Y3ZjdmNzsKK30K
Ky5Db2RlTWlycm9yLWxpbmVudW1iZXJzIHt9CisuQ29kZU1pcnJvci1saW5lbnVtYmVyIHsKKyAg
cGFkZGluZzogMCAzcHggMCA1cHg7CisgIG1pbi13aWR0aDogMjBweDsKKyAgdGV4dC1hbGlnbjog
cmlnaHQ7CisgIGNvbG9yOiAjOTk5OworfQorCisvKiBDVVJTT1IgKi8KKworLkNvZGVNaXJyb3Ig
cHJlLkNvZGVNaXJyb3ItY3Vyc29yIHsKKyAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCBibGFjazsK
K30KKy8qIFNob3duIHdoZW4gbW92aW5nIGluIGJpLWRpcmVjdGlvbmFsIHRleHQgKi8KKy5Db2Rl
TWlycm9yIHByZS5Db2RlTWlycm9yLXNlY29uZGFyeWN1cnNvciB7CisgIGJvcmRlci1sZWZ0OiAx
cHggc29saWQgc2lsdmVyOworfQorLmNtLWtleW1hcC1mYXQtY3Vyc29yIHByZS5Db2RlTWlycm9y
LWN1cnNvciB7CisgIHdpZHRoOiBhdXRvOworICBib3JkZXI6IDA7CisgIGJhY2tncm91bmQ6IHRy
YW5zcGFyZW50OworICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDIwMCwgMCwgLjQpOworICBmaWx0ZXI6
IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3Ry
PSM2NjAwYzgwMCwgZW5kQ29sb3JzdHI9IzRjMDBjODAwKTsKK30KKy8qIEtsdWRnZSB0byB0dXJu
IG9mZiBmaWx0ZXIgaW4gaWU5Kywgd2hpY2ggYWxzbyBhY2NlcHRzIHJnYmEgKi8KKy5jbS1rZXlt
YXAtZmF0LWN1cnNvciBwcmUuQ29kZU1pcnJvci1jdXJzb3I6bm90KCNub25zZW5zZV9pZCkgewor
ICBmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChlbmFi
bGVkPWZhbHNlKTsKK30KKy8qIENhbiBzdHlsZSBjdXJzb3IgZGlmZmVyZW50IGluIG92ZXJ3cml0
ZSAobm9uLWluc2VydCkgbW9kZSAqLworLkNvZGVNaXJyb3IgcHJlLkNvZGVNaXJyb3ItY3Vyc29y
LkNvZGVNaXJyb3Itb3ZlcndyaXRlIHt9CisKKy8qIERFRkFVTFQgVEhFTUUgKi8KKworLmNtLXMt
ZGVmYXVsdCAuY20ta2V5d29yZCB7Y29sb3I6ICM3MDg7fQorLmNtLXMtZGVmYXVsdCAuY20tYXRv
bSB7Y29sb3I6ICMyMTk7fQorLmNtLXMtZGVmYXVsdCAuY20tbnVtYmVyIHtjb2xvcjogIzE2NDt9
CisuY20tcy1kZWZhdWx0IC5jbS1kZWYge2NvbG9yOiAjMDBmO30KKy5jbS1zLWRlZmF1bHQgLmNt
LXZhcmlhYmxlIHtjb2xvcjogYmxhY2s7fQorLmNtLXMtZGVmYXVsdCAuY20tdmFyaWFibGUtMiB7
Y29sb3I6ICMwNWE7fQorLmNtLXMtZGVmYXVsdCAuY20tdmFyaWFibGUtMyB7Y29sb3I6ICMwODU7
fQorLmNtLXMtZGVmYXVsdCAuY20tcHJvcGVydHkge2NvbG9yOiBibGFjazt9CisuY20tcy1kZWZh
dWx0IC5jbS1vcGVyYXRvciB7Y29sb3I6IGJsYWNrO30KKy5jbS1zLWRlZmF1bHQgLmNtLWNvbW1l
bnQge2NvbG9yOiAjYTUwO30KKy5jbS1zLWRlZmF1bHQgLmNtLXN0cmluZyB7Y29sb3I6ICNhMTE7
fQorLmNtLXMtZGVmYXVsdCAuY20tc3RyaW5nLTIge2NvbG9yOiAjZjUwO30KKy5jbS1zLWRlZmF1
bHQgLmNtLW1ldGEge2NvbG9yOiAjNTU1O30KKy5jbS1zLWRlZmF1bHQgLmNtLWVycm9yIHtjb2xv
cjogI2YwMDt9CisuY20tcy1kZWZhdWx0IC5jbS1xdWFsaWZpZXIge2NvbG9yOiAjNTU1O30KKy5j
bS1zLWRlZmF1bHQgLmNtLWJ1aWx0aW4ge2NvbG9yOiAjMzBhO30KKy5jbS1zLWRlZmF1bHQgLmNt
LWJyYWNrZXQge2NvbG9yOiAjOTk3O30KKy5jbS1zLWRlZmF1bHQgLmNtLXRhZyB7Y29sb3I6ICMx
NzA7fQorLmNtLXMtZGVmYXVsdCAuY20tYXR0cmlidXRlIHtjb2xvcjogIzAwYzt9CisuY20tcy1k
ZWZhdWx0IC5jbS1oZWFkZXIge2NvbG9yOiBibHVlO30KKy5jbS1zLWRlZmF1bHQgLmNtLXF1b3Rl
IHtjb2xvcjogIzA5MDt9CisuY20tcy1kZWZhdWx0IC5jbS1ociB7Y29sb3I6ICM5OTk7fQorLmNt
LXMtZGVmYXVsdCAuY20tbGluayB7Y29sb3I6ICMwMGM7fQorCisuY20taGVhZGVyLCAuY20tc3Ry
b25nIHtmb250LXdlaWdodDogYm9sZDt9CisuY20tZW0ge2ZvbnQtc3R5bGU6IGl0YWxpYzt9Cisu
Y20tZW1zdHJvbmcge2ZvbnQtc3R5bGU6IGl0YWxpYzsgZm9udC13ZWlnaHQ6IGJvbGQ7fQorLmNt
LWxpbmsge3RleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO30KKworLmNtLWludmFsaWRjaGFyIHtj
b2xvcjogI2YwMDt9CisKK2Rpdi5Db2RlTWlycm9yIHNwYW4uQ29kZU1pcnJvci1tYXRjaGluZ2Jy
YWNrZXQge2NvbG9yOiAjMGYwO30KK2Rpdi5Db2RlTWlycm9yIHNwYW4uQ29kZU1pcnJvci1ub25t
YXRjaGluZ2JyYWNrZXQge2NvbG9yOiAjZjIyO30KIAotICAvKiBOZWNlc3Nhcnkgc28gdGhlIHNj
cm9sbGJhciBjYW4gYmUgYWJzb2x1dGVseSBwb3NpdGlvbmVkIHdpdGhpbiB0aGUgd3JhcHBlciBv
biBMaW9uLiAqLworLyogU1RPUCAqLworCisvKiBUaGUgcmVzdCBvZiB0aGlzIGZpbGUgY29udGFp
bnMgc3R5bGVzIHJlbGF0ZWQgdG8gdGhlIG1lY2hhbmljcyBvZgorICAgdGhlIGVkaXRvci4gWW91
IHByb2JhYmx5IHNob3VsZG4ndCB0b3VjaCB0aGVtLiAqLworCisuQ29kZU1pcnJvciB7CisgIGxp
bmUtaGVpZ2h0OiAxOwogICBwb3NpdGlvbjogcmVsYXRpdmU7Ci0gIC8qIFRoaXMgcHJldmVudHMg
dW53YW50ZWQgc2Nyb2xsYmFycyBmcm9tIHNob3dpbmcgdXAgb24gdGhlIGJvZHkgYW5kIHdyYXBw
ZXIgaW4gSUUuICovCiAgIG92ZXJmbG93OiBoaWRkZW47CiB9CiAKIC5Db2RlTWlycm9yLXNjcm9s
bCB7Ci0gIG92ZXJmbG93OiBhdXRvOwotICBoZWlnaHQ6IDMwMHB4OwotICAvKiBUaGlzIGlzIG5l
ZWRlZCB0byBwcmV2ZW50IGFuIElFWzY3XSBidWcgd2hlcmUgdGhlIHNjcm9sbGVkIGNvbnRlbnQK
LSAgICAgaXMgdmlzaWJsZSBvdXRzaWRlIG9mIHRoZSBzY3JvbGxpbmcgYm94LiAqLworICAvKiAz
MHB4IGlzIHRoZSBtYWdpYyBtYXJnaW4gdXNlZCB0byBoaWRlIHRoZSBlbGVtZW50J3MgcmVhbCBz
Y3JvbGxiYXJzICovCisgIC8qIFNlZSBvdmVyZmxvdzogaGlkZGVuIGluIC5Db2RlTWlycm9yLCBh
bmQgdGhlIHBhZGRpbmdzIGluIC5Db2RlTWlycm9yLXNpemVyICovCisgIG1hcmdpbi1ib3R0b206
IC0zMHB4OyBtYXJnaW4tcmlnaHQ6IC0zMHB4OworICBwYWRkaW5nLWJvdHRvbTogMzBweDsgcGFk
ZGluZy1yaWdodDogMzBweDsKKyAgaGVpZ2h0OiAxMDAlOworICBvdXRsaW5lOiBub25lOyAvKiBQ
cmV2ZW50IGRyYWdnaW5nIGZyb20gaGlnaGxpZ2h0aW5nIHRoZSBlbGVtZW50ICovCisgIHBvc2l0
aW9uOiByZWxhdGl2ZTsKK30KKy5Db2RlTWlycm9yLXNpemVyIHsKICAgcG9zaXRpb246IHJlbGF0
aXZlOwotICBvdXRsaW5lOiBub25lOwogfQogCi0vKiBWZXJ0aWNhbCBzY3JvbGxiYXIgKi8KLS5D
b2RlTWlycm9yLXNjcm9sbGJhciB7CisvKiBUaGUgZmFrZSwgdmlzaWJsZSBzY3JvbGxiYXJzLiBV
c2VkIHRvIGZvcmNlIHJlZHJhdyBkdXJpbmcgc2Nyb2xsaW5nCisgICBiZWZvcmUgYWN0dWFsbCBz
Y3JvbGxpbmcgaGFwcGVucywgdGh1cyBwcmV2ZW50aW5nIHNoYWtpbmcgYW5kCisgICBmbGlja2Vy
aW5nIGFydGlmYWN0cy4gKi8KKy5Db2RlTWlycm9yLXZzY3JvbGxiYXIsIC5Db2RlTWlycm9yLWhz
Y3JvbGxiYXIsIC5Db2RlTWlycm9yLXNjcm9sbGJhci1maWxsZXIgewogICBwb3NpdGlvbjogYWJz
b2x1dGU7CisgIHotaW5kZXg6IDY7CisgIGRpc3BsYXk6IG5vbmU7Cit9CisuQ29kZU1pcnJvci12
c2Nyb2xsYmFyIHsKICAgcmlnaHQ6IDA7IHRvcDogMDsKICAgb3ZlcmZsb3cteDogaGlkZGVuOwog
ICBvdmVyZmxvdy15OiBzY3JvbGw7Ci0gIHotaW5kZXg6IDU7Ci19Ci0uQ29kZU1pcnJvci1zY3Jv
bGxiYXItaW5uZXIgewotICAvKiBUaGlzIG5lZWRzIHRvIGhhdmUgYSBub256ZXJvIHdpZHRoIGlu
IG9yZGVyIGZvciB0aGUgc2Nyb2xsYmFyIHRvIGFwcGVhcgotICAgICBpbiBGaXJlZm94IGFuZCBJ
RTkuICovCi0gIHdpZHRoOiAxcHg7Ci19Ci0uQ29kZU1pcnJvci1zY3JvbGxiYXIuY20tc2Itb3Zl
cmxhcCB7Ci0gIC8qIEVuc3VyZSB0aGF0IHRoZSBzY3JvbGxiYXIgYXBwZWFycyBpbiBMaW9uLCBh
bmQgdGhhdCBpdCBvdmVybGFwcyB0aGUgY29udGVudAotICAgICByYXRoZXIgdGhhbiBzaXR0aW5n
IHRvIHRoZSByaWdodCBvZiBpdC4gKi8KLSAgcG9zaXRpb246IGFic29sdXRlOwotICB6LWluZGV4
OiAxOwotICBmbG9hdDogbm9uZTsKLSAgcmlnaHQ6IDA7Ci0gIG1pbi13aWR0aDogMTJweDsKIH0K
LS5Db2RlTWlycm9yLXNjcm9sbGJhci5jbS1zYi1ub25vdmVybGFwIHsKLSAgbWluLXdpZHRoOiAx
MnB4OworLkNvZGVNaXJyb3ItaHNjcm9sbGJhciB7CisgIGJvdHRvbTogMDsgbGVmdDogMDsKKyAg
b3ZlcmZsb3cteTogaGlkZGVuOworICBvdmVyZmxvdy14OiBzY3JvbGw7CiB9Ci0uQ29kZU1pcnJv
ci1zY3JvbGxiYXIuY20tc2ItaWU3IHsKLSAgbWluLXdpZHRoOiAxOHB4OworLkNvZGVNaXJyb3It
c2Nyb2xsYmFyLWZpbGxlciB7CisgIHJpZ2h0OiAwOyBib3R0b206IDA7CisgIHotaW5kZXg6IDY7
CiB9CiAKLS5Db2RlTWlycm9yLWd1dHRlciB7CisuQ29kZU1pcnJvci1ndXR0ZXJzIHsKICAgcG9z
aXRpb246IGFic29sdXRlOyBsZWZ0OiAwOyB0b3A6IDA7Ci0gIHotaW5kZXg6IDEwOwotICBiYWNr
Z3JvdW5kLWNvbG9yOiAjZjdmN2Y3OwotICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjZWVlOwot
ICBtaW4td2lkdGg6IDJlbTsKICAgaGVpZ2h0OiAxMDAlOworICB6LWluZGV4OiAzOwogfQotLkNv
ZGVNaXJyb3ItZ3V0dGVyLXRleHQgewotICBjb2xvcjogI2FhYTsKLSAgdGV4dC1hbGlnbjogcmln
aHQ7Ci0gIHBhZGRpbmc6IC40ZW0gLjJlbSAuNGVtIC40ZW07Ci0gIHdoaXRlLXNwYWNlOiBwcmUg
IWltcG9ydGFudDsKKy5Db2RlTWlycm9yLWd1dHRlciB7CisgIGhlaWdodDogMTAwJTsKKyAgZmxv
YXQ6IGxlZnQ7Cit9CisuQ29kZU1pcnJvci1ndXR0ZXItZWx0IHsKKyAgcG9zaXRpb246IGFic29s
dXRlOwogICBjdXJzb3I6IGRlZmF1bHQ7CisgIHotaW5kZXg6IDQ7CiB9CisKIC5Db2RlTWlycm9y
LWxpbmVzIHsKLSAgcGFkZGluZzogLjRlbTsKLSAgd2hpdGUtc3BhY2U6IHByZTsKICAgY3Vyc29y
OiB0ZXh0OwogfQotCiAuQ29kZU1pcnJvciBwcmUgewotICAtbW96LWJvcmRlci1yYWRpdXM6IDA7
Ci0gIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMDsKLSAgLW8tYm9yZGVyLXJhZGl1czogMDsKLSAg
Ym9yZGVyLXJhZGl1czogMDsKLSAgYm9yZGVyLXdpZHRoOiAwOyBtYXJnaW46IDA7IHBhZGRpbmc6
IDA7IGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OworICAvKiBSZXNldCBzb21lIHN0eWxlcyB0aGF0
IHRoZSByZXN0IG9mIHRoZSBwYWdlIG1pZ2h0IGhhdmUgc2V0ICovCisgIC1tb3otYm9yZGVyLXJh
ZGl1czogMDsgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAwOyAtby1ib3JkZXItcmFkaXVzOiAwOyBi
b3JkZXItcmFkaXVzOiAwOworICBib3JkZXItd2lkdGg6IDA7CisgIGJhY2tncm91bmQ6IHRyYW5z
cGFyZW50OwogICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgZm9udC1zaXplOiBpbmhlcml0Owot
ICBwYWRkaW5nOiAwOyBtYXJnaW46IDA7CisgIG1hcmdpbjogMDsKICAgd2hpdGUtc3BhY2U6IHBy
ZTsKICAgd29yZC13cmFwOiBub3JtYWw7CiAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0OwogICBjb2xv
cjogaW5oZXJpdDsKKyAgei1pbmRleDogMjsKKyAgcG9zaXRpb246IHJlbGF0aXZlOworICBvdmVy
ZmxvdzogdmlzaWJsZTsKIH0KLQogLkNvZGVNaXJyb3Itd3JhcCBwcmUgewogICB3b3JkLXdyYXA6
IGJyZWFrLXdvcmQ7CiAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKICAgd29yZC1icmVhazogbm9y
bWFsOwogfQorLkNvZGVNaXJyb3ItbGluZWJhY2tncm91bmQgeworICBwb3NpdGlvbjogYWJzb2x1
dGU7CisgIGxlZnQ6IDA7IHJpZ2h0OiAwOyB0b3A6IDA7IGJvdHRvbTogMDsKKyAgei1pbmRleDog
MDsKK30KKworLkNvZGVNaXJyb3ItbGluZXdpZGdldCB7CisgIHBvc2l0aW9uOiByZWxhdGl2ZTsK
KyAgei1pbmRleDogMjsKK30KKwogLkNvZGVNaXJyb3Itd3JhcCAuQ29kZU1pcnJvci1zY3JvbGwg
ewogICBvdmVyZmxvdy14OiBoaWRkZW47CiB9CiAKLS5Db2RlTWlycm9yIHRleHRhcmVhIHsKLSAg
b3V0bGluZTogbm9uZSAhaW1wb3J0YW50OworLkNvZGVNaXJyb3ItbWVhc3VyZSB7CisgIHBvc2l0
aW9uOiBhYnNvbHV0ZTsKKyAgd2lkdGg6IDEwMCU7IGhlaWdodDogMHB4OworICBvdmVyZmxvdzog
aGlkZGVuOworICB2aXNpYmlsaXR5OiBoaWRkZW47CiB9CisuQ29kZU1pcnJvci1tZWFzdXJlIHBy
ZSB7IHBvc2l0aW9uOiBzdGF0aWM7IH0KIAogLkNvZGVNaXJyb3IgcHJlLkNvZGVNaXJyb3ItY3Vy
c29yIHsKLSAgei1pbmRleDogMTA7CiAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgdmlzaWJpbGl0
eTogaGlkZGVuOwotICBib3JkZXItbGVmdDogMXB4IHNvbGlkIGJsYWNrOwogICBib3JkZXItcmln
aHQ6IG5vbmU7CiAgIHdpZHRoOiAwOwogfQotLmNtLWtleW1hcC1mYXQtY3Vyc29yIHByZS5Db2Rl
TWlycm9yLWN1cnNvciB7Ci0gIHdpZHRoOiBhdXRvOwotICBib3JkZXI6IDA7Ci0gIGJhY2tncm91
bmQ6IHRyYW5zcGFyZW50OwotICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDIwMCwgMCwgLjQpOwotICBm
aWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENv
bG9yc3RyPSM2NjAwYzgwMCwgZW5kQ29sb3JzdHI9IzRjMDBjODAwKTsKLX0KLS8qIEtsdWRnZSB0
byB0dXJuIG9mZiBmaWx0ZXIgaW4gaWU5Kywgd2hpY2ggYWxzbyBhY2NlcHRzIHJnYmEgKi8KLS5j
bS1rZXltYXAtZmF0LWN1cnNvciBwcmUuQ29kZU1pcnJvci1jdXJzb3I6bm90KCNub25zZW5zZV9p
ZCkgewotICBmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVu
dChlbmFibGVkPWZhbHNlKTsKLX0KLS5Db2RlTWlycm9yIHByZS5Db2RlTWlycm9yLWN1cnNvci5D
b2RlTWlycm9yLW92ZXJ3cml0ZSB7fQogLkNvZGVNaXJyb3ItZm9jdXNlZCBwcmUuQ29kZU1pcnJv
ci1jdXJzb3IgewogICB2aXNpYmlsaXR5OiB2aXNpYmxlOwogfQogCi1kaXYuQ29kZU1pcnJvci1z
ZWxlY3RlZCB7IGJhY2tncm91bmQ6ICNkOWQ5ZDk7IH0KLS5Db2RlTWlycm9yLWZvY3VzZWQgZGl2
LkNvZGVNaXJyb3Itc2VsZWN0ZWQgeyBiYWNrZ3JvdW5kOiAjZDdkNGYwOyB9CisuQ29kZU1pcnJv
ci1zZWxlY3RlZCB7IGJhY2tncm91bmQ6ICNkOWQ5ZDk7IH0KKy5Db2RlTWlycm9yLWZvY3VzZWQg
LkNvZGVNaXJyb3Itc2VsZWN0ZWQgeyBiYWNrZ3JvdW5kOiAjZDdkNGYwOyB9CiAKIC5Db2RlTWly
cm9yLXNlYXJjaGluZyB7CiAgIGJhY2tncm91bmQ6ICNmZmE7CiAgIGJhY2tncm91bmQ6IHJnYmEo
MjU1LCAyNTUsIDAsIC40KTsKIH0KIAotLyogRGVmYXVsdCB0aGVtZSAqLwotCi0uY20tcy1kZWZh
dWx0IHNwYW4uY20ta2V5d29yZCB7Y29sb3I6ICM3MDg7fQotLmNtLXMtZGVmYXVsdCBzcGFuLmNt
LWF0b20ge2NvbG9yOiAjMjE5O30KLS5jbS1zLWRlZmF1bHQgc3Bhbi5jbS1udW1iZXIge2NvbG9y
OiAjMTY0O30KLS5jbS1zLWRlZmF1bHQgc3Bhbi5jbS1kZWYge2NvbG9yOiAjMDBmO30KLS5jbS1z
LWRlZmF1bHQgc3Bhbi5jbS12YXJpYWJsZSB7Y29sb3I6IGJsYWNrO30KLS5jbS1zLWRlZmF1bHQg
c3Bhbi5jbS12YXJpYWJsZS0yIHtjb2xvcjogIzA1YTt9Ci0uY20tcy1kZWZhdWx0IHNwYW4uY20t
dmFyaWFibGUtMyB7Y29sb3I6ICMwODU7fQotLmNtLXMtZGVmYXVsdCBzcGFuLmNtLXByb3BlcnR5
IHtjb2xvcjogYmxhY2s7fQotLmNtLXMtZGVmYXVsdCBzcGFuLmNtLW9wZXJhdG9yIHtjb2xvcjog
YmxhY2s7fQotLmNtLXMtZGVmYXVsdCBzcGFuLmNtLWNvbW1lbnQge2NvbG9yOiAjYTUwO30KLS5j
bS1zLWRlZmF1bHQgc3Bhbi5jbS1zdHJpbmcge2NvbG9yOiAjYTExO30KLS5jbS1zLWRlZmF1bHQg
c3Bhbi5jbS1zdHJpbmctMiB7Y29sb3I6ICNmNTA7fQotLmNtLXMtZGVmYXVsdCBzcGFuLmNtLW1l
dGEge2NvbG9yOiAjNTU1O30KLS5jbS1zLWRlZmF1bHQgc3Bhbi5jbS1lcnJvciB7Y29sb3I6ICNm
MDA7fQotLmNtLXMtZGVmYXVsdCBzcGFuLmNtLXF1YWxpZmllciB7Y29sb3I6ICM1NTU7fQotLmNt
LXMtZGVmYXVsdCBzcGFuLmNtLWJ1aWx0aW4ge2NvbG9yOiAjMzBhO30KLS5jbS1zLWRlZmF1bHQg
c3Bhbi5jbS1icmFja2V0IHtjb2xvcjogI2NjNzt9Ci0uY20tcy1kZWZhdWx0IHNwYW4uY20tdGFn
IHtjb2xvcjogIzE3MDt9Ci0uY20tcy1kZWZhdWx0IHNwYW4uY20tYXR0cmlidXRlIHtjb2xvcjog
IzAwYzt9Ci0uY20tcy1kZWZhdWx0IHNwYW4uY20taGVhZGVyIHtjb2xvcjogYmx1ZTt9Ci0uY20t
cy1kZWZhdWx0IHNwYW4uY20tcXVvdGUge2NvbG9yOiAjMDkwO30KLS5jbS1zLWRlZmF1bHQgc3Bh
bi5jbS1ociB7Y29sb3I6ICM5OTk7fQotLmNtLXMtZGVmYXVsdCBzcGFuLmNtLWxpbmsge2NvbG9y
OiAjMDBjO30KLQotc3Bhbi5jbS1oZWFkZXIsIHNwYW4uY20tc3Ryb25nIHtmb250LXdlaWdodDog
Ym9sZDt9Ci1zcGFuLmNtLWVtIHtmb250LXN0eWxlOiBpdGFsaWM7fQotc3Bhbi5jbS1lbXN0cm9u
ZyB7Zm9udC1zdHlsZTogaXRhbGljOyBmb250LXdlaWdodDogYm9sZDt9Ci1zcGFuLmNtLWxpbmsg
e3RleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO30KLQotc3Bhbi5jbS1pbnZhbGlkY2hhciB7Y29s
b3I6ICNmMDA7fQotCi1kaXYuQ29kZU1pcnJvciBzcGFuLkNvZGVNaXJyb3ItbWF0Y2hpbmdicmFj
a2V0IHtjb2xvcjogIzBmMDt9Ci1kaXYuQ29kZU1pcnJvciBzcGFuLkNvZGVNaXJyb3Itbm9ubWF0
Y2hpbmdicmFja2V0IHtjb2xvcjogI2YyMjt9CisvKiBJRTcgaGFjayB0byBwcmV2ZW50IGl0IGZy
b20gcmV0dXJuaW5nIGZ1bm55IG9mZnNldFRvcHMgb24gdGhlIHNwYW5zICovCisuQ29kZU1pcnJv
ciBzcGFuIHsgKnZlcnRpY2FsLWFsaWduOiB0ZXh0LWJvdHRvbTsgfQogCiBAbWVkaWEgcHJpbnQg
ewotCiAgIC8qIEhpZGUgdGhlIGN1cnNvciB3aGVuIHByaW50aW5nICovCiAgIC5Db2RlTWlycm9y
IHByZS5Db2RlTWlycm9yLWN1cnNvciB7CiAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICB9Ci0K
LX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2NtL2NvZGVtaXJyb3IuanMgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2NtL2NvZGVtaXJyb3IuanMKaW5kZXggZDdiOGY4Yzk5Yzk0
NTA5MDgxNzg5ODVlZjdkMWJhMTNhNzRmOTFlZi4uNWI1ODRjODNiZDYyYTlkODdhODJlOWEyYWM1
MzUxOTUwMTI0MmZiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9jbS9jb2RlbWlycm9yLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvY20vY29kZW1pcnJvci5qcwpAQCAtMSwyMDgwICsxLDI3NDYgQEAKLS8vIEFsbCBmdW5j
dGlvbnMgdGhhdCBuZWVkIGFjY2VzcyB0byB0aGUgZWRpdG9yJ3Mgc3RhdGUgbGl2ZSBpbnNpZGUK
LS8vIHRoZSBDb2RlTWlycm9yIGZ1bmN0aW9uLiBCZWxvdyB0aGF0LCBhdCB0aGUgYm90dG9tIG9m
IHRoZSBmaWxlLAotLy8gc29tZSB1dGlsaXRpZXMgYXJlIGRlZmluZWQuCi0KIC8vIENvZGVNaXJy
b3IgaXMgdGhlIG9ubHkgZ2xvYmFsIHZhciB3ZSBjbGFpbQotdmFyIENvZGVNaXJyb3IgPSAoZnVu
Y3Rpb24oKSB7Cit3aW5kb3cuQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgInVzZSBzdHJp
Y3QiOwotICAvLyBUaGlzIGlzIHRoZSBmdW5jdGlvbiB0aGF0IHByb2R1Y2VzIGFuIGVkaXRvciBp
bnN0YW5jZS4gSXRzCi0gIC8vIGNsb3N1cmUgaXMgdXNlZCB0byBzdG9yZSB0aGUgZWRpdG9yIHN0
YXRlLgotICBmdW5jdGlvbiBDb2RlTWlycm9yKHBsYWNlLCBnaXZlbk9wdGlvbnMpIHsKKworICAv
LyBCUk9XU0VSIFNOSUZGSU5HCisKKyAgLy8gQ3J1ZGUsIGJ1dCBuZWNlc3NhcnkgdG8gaGFuZGxl
IGEgbnVtYmVyIG9mIGhhcmQtdG8tZmVhdHVyZS1kZXRlY3QKKyAgLy8gYnVncyBhbmQgYmVoYXZp
b3IgZGlmZmVyZW5jZXMuCisgIHZhciBnZWNrbyA9IC9nZWNrb1wvXGR7N30vaS50ZXN0KG5hdmln
YXRvci51c2VyQWdlbnQpOworICB2YXIgaWUgPSAvTVNJRSBcZC8udGVzdChuYXZpZ2F0b3IudXNl
ckFnZW50KTsKKyAgdmFyIGllX2x0OCA9IC9NU0lFIFsxLTddXGIvLnRlc3QobmF2aWdhdG9yLnVz
ZXJBZ2VudCk7CisgIHZhciBpZV9sdDkgPSAvTVNJRSBbMS04XVxiLy50ZXN0KG5hdmlnYXRvci51
c2VyQWdlbnQpOworICB2YXIgaWVfbHQxMCA9IC9NU0lFIFsxLTldXGIvLnRlc3QobmF2aWdhdG9y
LnVzZXJBZ2VudCk7CisgIHZhciB3ZWJraXQgPSAvV2ViS2l0XC8vLnRlc3QobmF2aWdhdG9yLnVz
ZXJBZ2VudCk7CisgIHZhciBjaHJvbWUgPSAvQ2hyb21lXC8vLnRlc3QobmF2aWdhdG9yLnVzZXJB
Z2VudCk7CisgIHZhciBvcGVyYSA9IC9PcGVyYVwvLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQp
OworICB2YXIgc2FmYXJpID0gL0FwcGxlIENvbXB1dGVyLy50ZXN0KG5hdmlnYXRvci52ZW5kb3Ip
OworICB2YXIga2h0bWwgPSAvS0hUTUxcLy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTsKKyAg
dmFyIG1hY19nZUxpb24gPSAvTWFjIE9TIFggMVxkXEQoWzctOV18XGRcZClcRC8udGVzdChuYXZp
Z2F0b3IudXNlckFnZW50KTsKKyAgdmFyIG1hY19nZU1vdW50YWluTGlvbiA9IC9NYWMgT1MgWCAx
XGRcRChbOC05XXxcZFxkKVxELy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpOworICB2YXIgcGhh
bnRvbSA9IC9QaGFudG9tSlMvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7CisKKyAgdmFyIGlv
cyA9IC9BcHBsZVdlYktpdC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSAmJiAvTW9iaWxlXC9c
dysvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7CisgIHZhciBtYWMgPSBpb3MgfHwgL01hYy8u
dGVzdChuYXZpZ2F0b3IucGxhdGZvcm0pOworICB2YXIgd2luID0gL1dpbi8udGVzdChuYXZpZ2F0
b3IucGxhdGZvcm0pOworCisgIC8vIE9wdGltaXplIHNvbWUgY29kZSB3aGVuIHRoZXNlIGZlYXR1
cmVzIGFyZSBub3QgdXNlZAorICB2YXIgc2F3UmVhZE9ubHlTcGFucyA9IGZhbHNlLCBzYXdDb2xs
YXBzZWRTcGFucyA9IGZhbHNlOworCisgIC8vIENPTlNUUlVDVE9SCisKKyAgZnVuY3Rpb24gQ29k
ZU1pcnJvcihwbGFjZSwgb3B0aW9ucykgeworICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBDb2Rl
TWlycm9yKSkgcmV0dXJuIG5ldyBDb2RlTWlycm9yKHBsYWNlLCBvcHRpb25zKTsKKyAgICAKKyAg
ICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKICAgICAvLyBEZXRlcm1p
bmUgZWZmZWN0aXZlIG9wdGlvbnMgYmFzZWQgb24gZ2l2ZW4gdmFsdWVzIGFuZCBkZWZhdWx0cy4K
LSAgICB2YXIgb3B0aW9ucyA9IHt9LCBkZWZhdWx0cyA9IENvZGVNaXJyb3IuZGVmYXVsdHM7Ci0g
ICAgZm9yICh2YXIgb3B0IGluIGRlZmF1bHRzKQotICAgICAgaWYgKGRlZmF1bHRzLmhhc093blBy
b3BlcnR5KG9wdCkpCi0gICAgICAgIG9wdGlvbnNbb3B0XSA9IChnaXZlbk9wdGlvbnMgJiYgZ2l2
ZW5PcHRpb25zLmhhc093blByb3BlcnR5KG9wdCkgPyBnaXZlbk9wdGlvbnMgOiBkZWZhdWx0cylb
b3B0XTsKKyAgICBmb3IgKHZhciBvcHQgaW4gZGVmYXVsdHMpIGlmICghb3B0aW9ucy5oYXNPd25Q
cm9wZXJ0eShvcHQpICYmIGRlZmF1bHRzLmhhc093blByb3BlcnR5KG9wdCkpCisgICAgICBvcHRp
b25zW29wdF0gPSBkZWZhdWx0c1tvcHRdOworICAgIHNldEd1dHRlcnNGb3JMaW5lTnVtYmVycyhv
cHRpb25zKTsKKworICAgIHZhciBkaXNwbGF5ID0gdGhpcy5kaXNwbGF5ID0gbWFrZURpc3BsYXko
cGxhY2UpOworICAgIGRpc3BsYXkud3JhcHBlci5Db2RlTWlycm9yID0gdGhpczsKKyAgICB1cGRh
dGVHdXR0ZXJzKHRoaXMpOworICAgIGlmIChvcHRpb25zLmF1dG9mb2N1cykgZm9jdXNJbnB1dCh0
aGlzKTsKKworICAgIHZhciBkb2MgPSBuZXcgQnJhbmNoQ2h1bmsoW25ldyBMZWFmQ2h1bmsoW21h
a2VMaW5lKCIiLCBudWxsLCB0ZXh0SGVpZ2h0KGRpc3BsYXkpKV0pXSk7CisgICAgLy8gVGhlIHNl
bGVjdGlvbi4gVGhlc2UgYXJlIGFsd2F5cyBtYWludGFpbmVkIHRvIHBvaW50IGF0IHZhbGlkCisg
ICAgLy8gcG9zaXRpb25zLiBJbnZlcnRlZCBpcyB1c2VkIHRvIHJlbWVtYmVyIHRoYXQgdGhlIHVz
ZXIgaXMKKyAgICAvLyBzZWxlY3RpbmcgYm90dG9tLXRvLXRvcC4KKyAgICB0aGlzLnZpZXcgPSB7
CisgICAgICBkb2M6IGRvYywKKyAgICAgIC8vIGZyb250aWVyIGlzIHRoZSBwb2ludCB1cCB0byB3
aGljaCB0aGUgY29udGVudCBoYXMgYmVlbiBwYXJzZWQsCisgICAgICBmcm9udGllcjogMCwgaGln
aGxpZ2h0OiBuZXcgRGVsYXllZCgpLAorICAgICAgc2VsOiB7ZnJvbToge2xpbmU6IDAsIGNoOiAw
fSwgdG86IHtsaW5lOiAwLCBjaDogMH0sIGludmVydGVkOiBmYWxzZSwgc2hpZnQ6IGZhbHNlfSwK
KyAgICAgIHNjcm9sbFRvcDogMCwgc2Nyb2xsTGVmdDogMCwKKyAgICAgIG92ZXJ3cml0ZTogZmFs
c2UsIGZvY3VzZWQ6IGZhbHNlLAorICAgICAgLy8gVHJhY2tzIHRoZSBtYXhpbXVtIGxpbmUgbGVu
Z3RoIHNvIHRoYXQKKyAgICAgIC8vIHRoZSBob3Jpem9udGFsIHNjcm9sbGJhciBjYW4gYmUga2Vw
dAorICAgICAgLy8gc3RhdGljIHdoZW4gc2Nyb2xsaW5nLgorICAgICAgbWF4TGluZTogZ2V0TGlu
ZShkb2MsIDApLAorICAgICAgbWF4TGluZUxlbmd0aDogMCwKKyAgICAgIG1heExpbmVDaGFuZ2Vk
OiBmYWxzZSwKKyAgICAgIHN1cHByZXNzRWRpdHM6IGZhbHNlLAorICAgICAgZ29hbENvbHVtbjog
bnVsbCwKKyAgICAgIGNhbnRFZGl0OiBmYWxzZQorICAgIH07CisgICAgbG9hZE1vZGUodGhpcyk7
CisKKyAgICAvLyBJbml0aWFsaXplIHRoZSBjb250ZW50LgorICAgIHRoaXMuc2V0VmFsdWUob3B0
aW9ucy52YWx1ZSB8fCAiIik7CisgICAgLy8gT3ZlcnJpZGUgbWFnaWMgdGV4dGFyZWEgY29udGVu
dCByZXN0b3JlIHRoYXQgSUUgc29tZXRpbWVzIGRvZXMKKyAgICAvLyBvbiBvdXIgaGlkZGVuIHRl
eHRhcmVhIG9uIHJlbG9hZAorICAgIGlmIChpZSkgc2V0VGltZW91dChiaW5kKHJlc2V0SW5wdXQs
IHRoaXMsIHRydWUpLCAyMCk7CisgICAgdGhpcy52aWV3Lmhpc3RvcnkgPSBtYWtlSGlzdG9yeSgp
OworCisgICAgcmVnaXN0ZXJFdmVudEhhbmRsZXJzKHRoaXMpOworICAgIC8vIElFIHRocm93cyB1
bnNwZWNpZmllZCBlcnJvciBpbiBjZXJ0YWluIGNhc2VzLCB3aGVuCisgICAgLy8gdHJ5aW5nIHRv
IGFjY2VzcyBhY3RpdmVFbGVtZW50IGJlZm9yZSBvbmxvYWQKKyAgICB2YXIgaGFzRm9jdXM7IHRy
eSB7IGhhc0ZvY3VzID0gKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT0gZGlzcGxheS5pbnB1dCk7
IH0gY2F0Y2goZSkgeyB9CisgICAgaWYgKGhhc0ZvY3VzIHx8IG9wdGlvbnMuYXV0b2ZvY3VzKSBz
ZXRUaW1lb3V0KGJpbmQob25Gb2N1cywgdGhpcyksIDIwKTsKKyAgICBlbHNlIG9uQmx1cih0aGlz
KTsKKworICAgIG9wZXJhdGlvbih0aGlzLCBmdW5jdGlvbigpIHsKKyAgICAgIGZvciAodmFyIG9w
dCBpbiBvcHRpb25IYW5kbGVycykKKyAgICAgICAgaWYgKG9wdGlvbkhhbmRsZXJzLnByb3BlcnR5
SXNFbnVtZXJhYmxlKG9wdCkpCisgICAgICAgICAgb3B0aW9uSGFuZGxlcnNbb3B0XSh0aGlzLCBv
cHRpb25zW29wdF0sIEluaXQpOworICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbml0SG9va3Mu
bGVuZ3RoOyArK2kpIGluaXRIb29rc1tpXSh0aGlzKTsKKyAgICB9KSgpOworICB9CisKKyAgLy8g
RElTUExBWSBDT05TVFJVQ1RPUgogCi0gICAgdmFyIGlucHV0ID0gZWx0KCJ0ZXh0YXJlYSIsIG51
bGwsIG51bGwsICJwb3NpdGlvbjogYWJzb2x1dGU7IHBhZGRpbmc6IDA7IHdpZHRoOiAxcHg7IGhl
aWdodDogMWVtIik7CisgIGZ1bmN0aW9uIG1ha2VEaXNwbGF5KHBsYWNlKSB7CisgICAgdmFyIGQg
PSB7fTsKKyAgICB2YXIgaW5wdXQgPSBkLmlucHV0ID0gZWx0KCJ0ZXh0YXJlYSIsIG51bGwsIG51
bGwsICJwb3NpdGlvbjogYWJzb2x1dGU7IHBhZGRpbmc6IDA7IHdpZHRoOiAxcHg7IGhlaWdodDog
MWVtOyBvdXRsaW5lOiBub25lOyIpOwogICAgIGlucHV0LnNldEF0dHJpYnV0ZSgid3JhcCIsICJv
ZmYiKTsgaW5wdXQuc2V0QXR0cmlidXRlKCJhdXRvY29ycmVjdCIsICJvZmYiKTsgaW5wdXQuc2V0
QXR0cmlidXRlKCJhdXRvY2FwaXRhbGl6ZSIsICJvZmYiKTsKICAgICAvLyBXcmFwcyBhbmQgaGlk
ZXMgaW5wdXQgdGV4dGFyZWEKLSAgICB2YXIgaW5wdXREaXYgPSBlbHQoImRpdiIsIFtpbnB1dF0s
IG51bGwsICJvdmVyZmxvdzogaGlkZGVuOyBwb3NpdGlvbjogcmVsYXRpdmU7IHdpZHRoOiAzcHg7
IGhlaWdodDogMHB4OyIpOwotICAgIC8vIFRoZSBlbXB0eSBzY3JvbGxiYXIgY29udGVudCwgdXNl
ZCBzb2xlbHkgZm9yIG1hbmFnaW5nIHRoZSBzY3JvbGxiYXIgdGh1bWIuCi0gICAgdmFyIHNjcm9s
bGJhcklubmVyID0gZWx0KCJkaXYiLCBudWxsLCAiQ29kZU1pcnJvci1zY3JvbGxiYXItaW5uZXIi
KTsKLSAgICAvLyBUaGUgdmVydGljYWwgc2Nyb2xsYmFyLiBIb3Jpem9udGFsIHNjcm9sbGluZyBp
cyBoYW5kbGVkIGJ5IHRoZSBzY3JvbGxlciBpdHNlbGYuCi0gICAgdmFyIHNjcm9sbGJhciA9IGVs
dCgiZGl2IiwgW3Njcm9sbGJhcklubmVyXSwgIkNvZGVNaXJyb3Itc2Nyb2xsYmFyIik7CisgICAg
ZC5pbnB1dERpdiA9IGVsdCgiZGl2IiwgW2lucHV0XSwgbnVsbCwgIm92ZXJmbG93OiBoaWRkZW47
IHBvc2l0aW9uOiByZWxhdGl2ZTsgd2lkdGg6IDNweDsgaGVpZ2h0OiAwcHg7Iik7CisgICAgLy8g
VGhlIGFjdHVhbCBmYWtlIHNjcm9sbGJhcnMuCisgICAgZC5zY3JvbGxiYXJIID0gZWx0KCJkaXYi
LCBbZWx0KCJkaXYiLCBudWxsLCBudWxsLCAiaGVpZ2h0OiAxcHgiKV0sICJDb2RlTWlycm9yLWhz
Y3JvbGxiYXIiKTsKKyAgICBkLnNjcm9sbGJhclYgPSBlbHQoImRpdiIsIFtlbHQoImRpdiIsIG51
bGwsIG51bGwsICJ3aWR0aDogMXB4IildLCAiQ29kZU1pcnJvci12c2Nyb2xsYmFyIik7CisgICAg
ZC5zY3JvbGxiYXJGaWxsZXIgPSBlbHQoImRpdiIsIG51bGwsICJDb2RlTWlycm9yLXNjcm9sbGJh
ci1maWxsZXIiKTsKICAgICAvLyBESVZzIGNvbnRhaW5pbmcgdGhlIHNlbGVjdGlvbiBhbmQgdGhl
IGFjdHVhbCBjb2RlCi0gICAgdmFyIGxpbmVEaXYgPSBlbHQoImRpdiIpLCBzZWxlY3Rpb25EaXYg
PSBlbHQoImRpdiIsIG51bGwsIG51bGwsICJwb3NpdGlvbjogcmVsYXRpdmU7IHotaW5kZXg6IC0x
Iik7CisgICAgZC5saW5lRGl2ID0gZWx0KCJkaXYiKTsKKyAgICBkLnNlbGVjdGlvbkRpdiA9IGVs
dCgiZGl2IiwgbnVsbCwgbnVsbCwgInBvc2l0aW9uOiByZWxhdGl2ZTsgei1pbmRleDogMSIpOwog
ICAgIC8vIEJsaW5reSBjdXJzb3IsIGFuZCBlbGVtZW50IHVzZWQgdG8gZW5zdXJlIGN1cnNvciBm
aXRzIGF0IHRoZSBlbmQgb2YgYSBsaW5lCi0gICAgdmFyIGN1cnNvciA9IGVsdCgicHJlIiwgIlx1
MDBhMCIsICJDb2RlTWlycm9yLWN1cnNvciIpLCB3aWR0aEZvcmNlciA9IGVsdCgicHJlIiwgIlx1
MDBhMCIsICJDb2RlTWlycm9yLWN1cnNvciIsICJ2aXNpYmlsaXR5OiBoaWRkZW4iKTsKKyAgICBk
LmN1cnNvciA9IGVsdCgicHJlIiwgIlx1MDBhMCIsICJDb2RlTWlycm9yLWN1cnNvciIpOworICAg
IC8vIFNlY29uZGFyeSBjdXJzb3IsIHNob3duIHdoZW4gb24gYSAnanVtcCcgaW4gYmktZGlyZWN0
aW9uYWwgdGV4dAorICAgIGQub3RoZXJDdXJzb3IgPSBlbHQoInByZSIsICJcdTAwYTAiLCAiQ29k
ZU1pcnJvci1jdXJzb3IgQ29kZU1pcnJvci1zZWNvbmRhcnljdXJzb3IiKTsKICAgICAvLyBVc2Vk
IHRvIG1lYXN1cmUgdGV4dCBzaXplCi0gICAgdmFyIG1lYXN1cmUgPSBlbHQoImRpdiIsIG51bGws
IG51bGwsICJwb3NpdGlvbjogYWJzb2x1dGU7IHdpZHRoOiAxMDAlOyBoZWlnaHQ6IDBweDsgb3Zl
cmZsb3c6IGhpZGRlbjsgdmlzaWJpbGl0eTogaGlkZGVuOyIpOwotICAgIHZhciBsaW5lU3BhY2Ug
PSBlbHQoImRpdiIsIFttZWFzdXJlLCBjdXJzb3IsIHdpZHRoRm9yY2VyLCBzZWxlY3Rpb25EaXYs
IGxpbmVEaXZdLCBudWxsLCAicG9zaXRpb246IHJlbGF0aXZlOyB6LWluZGV4OiAwIik7Ci0gICAg
dmFyIGd1dHRlclRleHQgPSBlbHQoImRpdiIsIG51bGwsICJDb2RlTWlycm9yLWd1dHRlci10ZXh0
IiksIGd1dHRlciA9IGVsdCgiZGl2IiwgW2d1dHRlclRleHRdLCAiQ29kZU1pcnJvci1ndXR0ZXIi
KTsKKyAgICBkLm1lYXN1cmUgPSBlbHQoImRpdiIsIG51bGwsICJDb2RlTWlycm9yLW1lYXN1cmUi
KTsKKyAgICAvLyBXcmFwcyBldmVyeXRoaW5nIHRoYXQgbmVlZHMgdG8gZXhpc3QgaW5zaWRlIHRo
ZSB2ZXJ0aWNhbGx5LXBhZGRlZCBjb29yZGluYXRlIHN5c3RlbQorICAgIGQubGluZVNwYWNlID0g
ZWx0KCJkaXYiLCBbZC5tZWFzdXJlLCBkLnNlbGVjdGlvbkRpdiwgZC5saW5lRGl2LCBkLmN1cnNv
ciwgZC5vdGhlckN1cnNvcl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwgInBvc2l0
aW9uOiByZWxhdGl2ZTsgb3V0bGluZTogbm9uZSIpOwogICAgIC8vIE1vdmVkIGFyb3VuZCBpdHMg
cGFyZW50IHRvIGNvdmVyIHZpc2libGUgdmlldwotICAgIHZhciBtb3ZlciA9IGVsdCgiZGl2Iiwg
W2d1dHRlciwgZWx0KCJkaXYiLCBbbGluZVNwYWNlXSwgIkNvZGVNaXJyb3ItbGluZXMiKV0sIG51
bGwsICJwb3NpdGlvbjogcmVsYXRpdmUiKTsKKyAgICBkLm1vdmVyID0gZWx0KCJkaXYiLCBbZWx0
KCJkaXYiLCBbZC5saW5lU3BhY2VdLCAiQ29kZU1pcnJvci1saW5lcyIpXSwgbnVsbCwgInBvc2l0
aW9uOiByZWxhdGl2ZSIpOworICAgIGQuZ3V0dGVycyA9IGVsdCgiZGl2IiwgbnVsbCwgIkNvZGVN
aXJyb3ItZ3V0dGVycyIpOworICAgIGQubGluZUd1dHRlciA9IG51bGw7CiAgICAgLy8gU2V0IHRv
IHRoZSBoZWlnaHQgb2YgdGhlIHRleHQsIGNhdXNlcyBzY3JvbGxpbmcKLSAgICB2YXIgc2l6ZXIg
PSBlbHQoImRpdiIsIFttb3Zlcl0sIG51bGwsICJwb3NpdGlvbjogcmVsYXRpdmUiKTsKKyAgICBk
LnNpemVyID0gZWx0KCJkaXYiLCBbZC5tb3Zlcl0sICJDb2RlTWlycm9yLXNpemVyIik7CisgICAg
Ly8gRCBpcyBuZWVkZWQgYmVjYXVzZSBiZWhhdmlvciBvZiBlbHRzIHdpdGggb3ZlcmZsb3c6IGF1
dG8gYW5kIHBhZGRpbmcgaXMgaW5jb25zaXN0ZW50IGFjcm9zcyBicm93c2VycworICAgIGQuaGVp
Z2h0Rm9yY2VyID0gZWx0KCJkaXYiLCAiXHUwMGEwIiwgbnVsbCwgInBvc2l0aW9uOiBhYnNvbHV0
ZTsgaGVpZ2h0OiAiICsgc2Nyb2xsZXJDdXRPZmYgKyAicHgiKTsKICAgICAvLyBQcm92aWRlcyBz
Y3JvbGxpbmcKLSAgICB2YXIgc2Nyb2xsZXIgPSBlbHQoImRpdiIsIFtzaXplcl0sICJDb2RlTWly
cm9yLXNjcm9sbCIpOwotICAgIHNjcm9sbGVyLnNldEF0dHJpYnV0ZSgidGFiSW5kZXgiLCAiLTEi
KTsKKyAgICBkLnNjcm9sbGVyID0gZWx0KCJkaXYiLCBbZC5zaXplciwgZC5oZWlnaHRGb3JjZXJd
LCAiQ29kZU1pcnJvci1zY3JvbGwiKTsKKyAgICBkLnNjcm9sbGVyLnNldEF0dHJpYnV0ZSgidGFi
SW5kZXgiLCAiLTEiKTsKICAgICAvLyBUaGUgZWxlbWVudCBpbiB3aGljaCB0aGUgZWRpdG9yIGxp
dmVzLgotICAgIHZhciB3cmFwcGVyID0gZWx0KCJkaXYiLCBbaW5wdXREaXYsIHNjcm9sbGJhciwg
c2Nyb2xsZXJdLCAiQ29kZU1pcnJvciIgKyAob3B0aW9ucy5saW5lV3JhcHBpbmcgPyAiIENvZGVN
aXJyb3Itd3JhcCIgOiAiIikpOwotICAgIGlmIChwbGFjZS5hcHBlbmRDaGlsZCkgcGxhY2UuYXBw
ZW5kQ2hpbGQod3JhcHBlcik7IGVsc2UgcGxhY2Uod3JhcHBlcik7CisgICAgZC53cmFwcGVyID0g
ZWx0KCJkaXYiLCBbZC5ndXR0ZXJzLCBkLmlucHV0RGl2LCBkLnNjcm9sbGJhckgsIGQuc2Nyb2xs
YmFyViwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLnNjcm9sbGJhckZpbGxlciwgZC5z
Y3JvbGxlcl0sICJDb2RlTWlycm9yIik7CisgICAgLy8gV29yayBhcm91bmQgSUU3IHotaW5kZXgg
YnVnCisgICAgaWYgKGllX2x0OCkgeyBkLmd1dHRlcnMuc3R5bGUuekluZGV4ID0gLTE7IGQuc2Ny
b2xsZXIuc3R5bGUucGFkZGluZ1JpZ2h0ID0gMDsgfQorICAgIGlmIChwbGFjZS5hcHBlbmRDaGls
ZCkgcGxhY2UuYXBwZW5kQ2hpbGQoZC53cmFwcGVyKTsgZWxzZSBwbGFjZShkLndyYXBwZXIpOwog
Ci0gICAgdGhlbWVDaGFuZ2VkKCk7IGtleU1hcENoYW5nZWQoKTsKICAgICAvLyBOZWVkZWQgdG8g
aGlkZSBiaWcgYmx1ZSBibGlua2luZyBjdXJzb3Igb24gTW9iaWxlIFNhZmFyaQogICAgIGlmIChp
b3MpIGlucHV0LnN0eWxlLndpZHRoID0gIjBweCI7Ci0gICAgaWYgKCF3ZWJraXQpIHNjcm9sbGVy
LmRyYWdnYWJsZSA9IHRydWU7Ci0gICAgbGluZVNwYWNlLnN0eWxlLm91dGxpbmUgPSAibm9uZSI7
Ci0gICAgaWYgKG9wdGlvbnMudGFiaW5kZXggIT0gbnVsbCkgaW5wdXQudGFiSW5kZXggPSBvcHRp
b25zLnRhYmluZGV4OwotICAgIGlmIChvcHRpb25zLmF1dG9mb2N1cykgZm9jdXNJbnB1dCgpOwot
ICAgIGlmICghb3B0aW9ucy5ndXR0ZXIgJiYgIW9wdGlvbnMubGluZU51bWJlcnMpIGd1dHRlci5z
dHlsZS5kaXNwbGF5ID0gIm5vbmUiOworICAgIGlmICghd2Via2l0KSBkLnNjcm9sbGVyLmRyYWdn
YWJsZSA9IHRydWU7CiAgICAgLy8gTmVlZGVkIHRvIGhhbmRsZSBUYWIga2V5IGluIEtIVE1MCi0g
ICAgaWYgKGtodG1sKSBpbnB1dERpdi5zdHlsZS5oZWlnaHQgPSAiMXB4IiwgaW5wdXREaXYuc3R5
bGUucG9zaXRpb24gPSAiYWJzb2x1dGUiOwotCi0gICAgLy8gQ2hlY2sgZm9yIE9TIFggPj0gMTAu
Ny4gSWYgc28sIHdlIG5lZWQgdG8gZm9yY2UgYSB3aWR0aCBvbiB0aGUgc2Nyb2xsYmFyLCBhbmQK
LSAgICAvLyBtYWtlIGl0IG92ZXJsYXAgdGhlIGNvbnRlbnQuIChCdXQgd2Ugb25seSBkbyB0aGlz
IGlmIHRoZSBzY3JvbGxiYXIgZG9lc24ndCBhbHJlYWR5Ci0gICAgLy8gaGF2ZSBhIG5hdHVyYWwg
d2lkdGguIElmIHRoZSBtb3VzZSBpcyBwbHVnZ2VkIGluIG9yIHRoZSB1c2VyIHNldHMgdGhlIHN5
c3RlbSBwcmVmCi0gICAgLy8gdG8gYWx3YXlzIHNob3cgc2Nyb2xsYmFycywgdGhlIHNjcm9sbGJh
ciBzaG91bGRuJ3Qgb3ZlcmxhcC4pCi0gICAgaWYgKG1hY19nZUxpb24pIHsKLSAgICAgIHNjcm9s
bGJhci5jbGFzc05hbWUgKz0gKG92ZXJsYXBTY3JvbGxiYXJzKCkgPyAiIGNtLXNiLW92ZXJsYXAi
IDogIiBjbS1zYi1ub25vdmVybGFwIik7Ci0gICAgfSBlbHNlIGlmIChpZV9sdDgpIHsKLSAgICAg
IC8vIE5lZWQgdG8gc2V0IGEgbWluaW11bSB3aWR0aCB0byBzZWUgdGhlIHNjcm9sbGJhciBvbiBJ
RTcgKGJ1dCBtdXN0IG5vdCBzZXQgaXQgb24gSUU4KS4KLSAgICAgIHNjcm9sbGJhci5jbGFzc05h
bWUgKz0gIiBjbS1zYi1pZTciOwotICAgIH0KLQotICAgIC8vIENoZWNrIGZvciBwcm9ibGVtIHdp
dGggSUUgaW5uZXJIVE1MIG5vdCB3b3JraW5nIHdoZW4gd2UgaGF2ZSBhCi0gICAgLy8gUCAob3Ig
c2ltaWxhcikgcGFyZW50IG5vZGUuCi0gICAgdHJ5IHsgY2hhcldpZHRoKCk7IH0KLSAgICBjYXRj
aCAoZSkgewotICAgICAgaWYgKGUubWVzc2FnZS5tYXRjaCgvcnVudGltZS9pKSkKLSAgICAgICAg
ZSA9IG5ldyBFcnJvcigiQSBDb2RlTWlycm9yIGluc2lkZSBhIFAtc3R5bGUgZWxlbWVudCBkb2Vz
IG5vdCB3b3JrIGluIEludGVybmV0IEV4cGxvcmVyLiAoaW5uZXJIVE1MIGJ1ZykiKTsKLSAgICAg
IHRocm93IGU7Ci0gICAgfQotCi0gICAgLy8gRGVsYXllZCBvYmplY3Qgd3JhcCB0aW1lb3V0cywg
bWFraW5nIHN1cmUgb25seSBvbmUgaXMgYWN0aXZlLiBibGlua2VyIGhvbGRzIGFuIGludGVydmFs
LgotICAgIHZhciBwb2xsID0gbmV3IERlbGF5ZWQoKSwgaGlnaGxpZ2h0ID0gbmV3IERlbGF5ZWQo
KSwgYmxpbmtlcjsKLQotICAgIC8vIG1vZGUgaG9sZHMgYSBtb2RlIEFQSSBvYmplY3QuIGRvYyBp
cyB0aGUgdHJlZSBvZiBMaW5lIG9iamVjdHMsCi0gICAgLy8gd29yayBhbiBhcnJheSBvZiBsaW5l
cyB0aGF0IHNob3VsZCBiZSBwYXJzZWQsIGFuZCBoaXN0b3J5IHRoZQotICAgIC8vIHVuZG8gaGlz
dG9yeSAoaW5zdGFuY2Ugb2YgSGlzdG9yeSBjb25zdHJ1Y3RvcikuCi0gICAgdmFyIG1vZGUsIGRv
YyA9IG5ldyBCcmFuY2hDaHVuayhbbmV3IExlYWZDaHVuayhbbmV3IExpbmUoIiIpXSldKSwgd29y
aywgZm9jdXNlZDsKLSAgICBsb2FkTW9kZSgpOwotICAgIC8vIFRoZSBzZWxlY3Rpb24uIFRoZXNl
IGFyZSBhbHdheXMgbWFpbnRhaW5lZCB0byBwb2ludCBhdCB2YWxpZAotICAgIC8vIHBvc2l0aW9u
cy4gSW52ZXJ0ZWQgaXMgdXNlZCB0byByZW1lbWJlciB0aGF0IHRoZSB1c2VyIGlzCi0gICAgLy8g
c2VsZWN0aW5nIGJvdHRvbS10by10b3AuCi0gICAgdmFyIHNlbCA9IHtmcm9tOiB7bGluZTogMCwg
Y2g6IDB9LCB0bzoge2xpbmU6IDAsIGNoOiAwfSwgaW52ZXJ0ZWQ6IGZhbHNlfTsKLSAgICAvLyBT
ZWxlY3Rpb24tcmVsYXRlZCBmbGFncy4gc2hpZnRTZWxlY3Rpbmcgb2J2aW91c2x5IHRyYWNrcwot
ICAgIC8vIHdoZXRoZXIgdGhlIHVzZXIgaXMgaG9sZGluZyBzaGlmdC4KLSAgICB2YXIgc2hpZnRT
ZWxlY3RpbmcsIGxhc3RDbGljaywgbGFzdERvdWJsZUNsaWNrLCBsYXN0U2Nyb2xsVG9wID0gMCwg
ZHJhZ2dpbmdUZXh0LAotICAgICAgICBvdmVyd3JpdGUgPSBmYWxzZSwgc3VwcHJlc3NFZGl0cyA9
IGZhbHNlOwotICAgIC8vIFZhcmlhYmxlcyB1c2VkIGJ5IHN0YXJ0T3BlcmF0aW9uL2VuZE9wZXJh
dGlvbiB0byB0cmFjayB3aGF0Ci0gICAgLy8gaGFwcGVuZWQgZHVyaW5nIHRoZSBvcGVyYXRpb24u
Ci0gICAgdmFyIHVwZGF0ZUlucHV0LCB1c2VyU2VsQ2hhbmdlLCBjaGFuZ2VzLCB0ZXh0Q2hhbmdl
ZCwgc2VsZWN0aW9uQ2hhbmdlZCwgbGVhdmVJbnB1dEFsb25lLAotICAgICAgICBndXR0ZXJEaXJ0
eSwgY2FsbGJhY2tzOworICAgIGlmIChraHRtbCkgeyBkLmlucHV0RGl2LnN0eWxlLmhlaWdodCA9
ICIxcHgiOyBkLmlucHV0RGl2LnN0eWxlLnBvc2l0aW9uID0gImFic29sdXRlIjsgfQorICAgIC8v
IE5lZWQgdG8gc2V0IGEgbWluaW11bSB3aWR0aCB0byBzZWUgdGhlIHNjcm9sbGJhciBvbiBJRTcg
KGJ1dCBtdXN0IG5vdCBzZXQgaXQgb24gSUU4KS4KKyAgICBlbHNlIGlmIChpZV9sdDgpIGQuc2Ny
b2xsYmFySC5zdHlsZS5taW5XaWR0aCA9IGQuc2Nyb2xsYmFyVi5zdHlsZS5taW5XaWR0aCA9ICIx
OHB4IjsKKwogICAgIC8vIEN1cnJlbnQgdmlzaWJsZSByYW5nZSAobWF5IGJlIGJpZ2dlciB0aGFu
IHRoZSB2aWV3IHdpbmRvdykuCi0gICAgdmFyIGRpc3BsYXlPZmZzZXQgPSAwLCBzaG93aW5nRnJv
bSA9IDAsIHNob3dpbmdUbyA9IDAsIGxhc3RTaXplQyA9IDA7Ci0gICAgLy8gYnJhY2tldEhpZ2hs
aWdodGVkIGlzIHVzZWQgdG8gcmVtZW1iZXIgdGhhdCBhIGJyYWNrZXQgaGFzIGJlZW4KLSAgICAv
LyBtYXJrZWQuCi0gICAgdmFyIGJyYWNrZXRIaWdobGlnaHRlZDsKLSAgICAvLyBUcmFja3MgdGhl
IG1heGltdW0gbGluZSBsZW5ndGggc28gdGhhdCB0aGUgaG9yaXpvbnRhbCBzY3JvbGxiYXIKLSAg
ICAvLyBjYW4gYmUga2VwdCBzdGF0aWMgd2hlbiBzY3JvbGxpbmcuCi0gICAgdmFyIG1heExpbmUg
PSBnZXRMaW5lKDApLCB1cGRhdGVNYXhMaW5lID0gZmFsc2UsIG1heExpbmVDaGFuZ2VkID0gdHJ1
ZTsKLSAgICB2YXIgdGFiQ2FjaGUgPSB7fTsKLSAgICB2YXIgcG9sbGluZ0Zhc3QgPSBmYWxzZTsg
Ly8gRW5zdXJlcyBzbG93UG9sbCBkb2Vzbid0IGNhbmNlbCBmYXN0UG9sbAotICAgIHZhciBnb2Fs
Q29sdW1uID0gbnVsbDsKKyAgICBkLnZpZXdPZmZzZXQgPSBkLnNob3dpbmdGcm9tID0gZC5zaG93
aW5nVG8gPSBkLmxhc3RTaXplQyA9IDA7CisKKyAgICAvLyBVc2VkIHRvIG9ubHkgcmVzaXplIHRo
ZSBsaW5lIG51bWJlciBndXR0ZXIgd2hlbiBuZWNlc3NhcnkgKHdoZW4KKyAgICAvLyB0aGUgYW1v
dW50IG9mIGxpbmVzIGNyb3NzZXMgYSBib3VuZGFyeSB0aGF0IG1ha2VzIGl0cyB3aWR0aCBjaGFu
Z2UpCisgICAgZC5saW5lTnVtV2lkdGggPSBkLmxpbmVOdW1Jbm5lcldpZHRoID0gZC5saW5lTnVt
Q2hhcnMgPSBudWxsOworICAgIC8vIFNlZSByZWFkSW5wdXQgYW5kIHJlc2V0SW5wdXQKKyAgICBk
LnByZXZJbnB1dCA9ICIiOworICAgIC8vIFNldCB0byB0cnVlIHdoZW4gYSBub24taG9yaXpvbnRh
bC1zY3JvbGxpbmcgd2lkZ2V0IGlzIGFkZGVkLiBBcworICAgIC8vIGFuIG9wdGltaXphdGlvbiwg
d2lkZ2V0IGFsaWduaW5nIGlzIHNraXBwZWQgd2hlbiBkIGlzIGZhbHNlLgorICAgIGQuYWxpZ25X
aWRnZXRzID0gZmFsc2U7CisgICAgLy8gRmxhZyB0aGF0IGluZGljYXRlcyB3aGV0aGVyIHdlIGN1
cnJlbnRseSBleHBlY3QgaW5wdXQgdG8gYXBwZWFyCisgICAgLy8gKGFmdGVyIHNvbWUgZXZlbnQg
bGlrZSAna2V5cHJlc3MnIG9yICdpbnB1dCcpIGFuZCBhcmUgcG9sbGluZworICAgIC8vIGludGVu
c2l2ZWx5LgorICAgIGQucG9sbGluZ0Zhc3QgPSBmYWxzZTsKKyAgICAvLyBTZWxmLXJlc2V0dGlu
ZyB0aW1lb3V0IGZvciB0aGUgcG9sbGVyCisgICAgZC5wb2xsID0gbmV3IERlbGF5ZWQoKTsKKyAg
ICAvLyBUcnVlIHdoZW4gYSBkcmFnIGZyb20gdGhlIGVkaXRvciBpcyBhY3RpdmUKKyAgICBkLmRy
YWdnaW5nVGV4dCA9IGZhbHNlOworCisgICAgZC5jYWNoZWRDaGFyV2lkdGggPSBkLmNhY2hlZFRl
eHRIZWlnaHQgPSBudWxsOworICAgIGQubWVhc3VyZUxpbmVDYWNoZSA9IFtdOworICAgIGQubWVh
c3VyZUxpbmVDYWNoZS5wb3MgPSAwOworCisgICAgLy8gVHJhY2tzIHdoZW4gcmVzZXRJbnB1dCBo
YXMgcHVudGVkIHRvIGp1c3QgcHV0dGluZyBhIHNob3J0CisgICAgLy8gc3RyaW5nIGluc3RlYWQg
b2YgdGhlIChsYXJnZSkgc2VsZWN0aW9uLgorICAgIGQuaW5hY2N1cmF0ZVNlbGVjdGlvbiA9IGZh
bHNlOworCisgICAgLy8gVXNlZCB0byBhZGp1c3Qgb3ZlcndyaXRlIGJlaGF2aW91ciB3aGVuIGEg
cGFzdGUgaGFzIGJlZW4KKyAgICAvLyBkZXRlY3RlZAorICAgIGQucGFzdGVJbmNvbWluZyA9IGZh
bHNlOworCisgICAgcmV0dXJuIGQ7CisgIH0KIAotICAgIC8vIEluaXRpYWxpemUgdGhlIGNvbnRl
bnQuCi0gICAgb3BlcmF0aW9uKGZ1bmN0aW9uKCl7c2V0VmFsdWUob3B0aW9ucy52YWx1ZSB8fCAi
Iik7IHVwZGF0ZUlucHV0ID0gZmFsc2U7fSkoKTsKLSAgICB2YXIgaGlzdG9yeSA9IG5ldyBIaXN0
b3J5KCk7CisgIC8vIFNUQVRFIFVQREFURVMKIAotICAgIC8vIFJlZ2lzdGVyIG91ciBldmVudCBo
YW5kbGVycy4KLSAgICBjb25uZWN0KHNjcm9sbGVyLCAibW91c2Vkb3duIiwgb3BlcmF0aW9uKG9u
TW91c2VEb3duKSk7Ci0gICAgY29ubmVjdChzY3JvbGxlciwgImRibGNsaWNrIiwgb3BlcmF0aW9u
KG9uRG91YmxlQ2xpY2spKTsKLSAgICBjb25uZWN0KGxpbmVTcGFjZSwgInNlbGVjdHN0YXJ0Iiwg
ZV9wcmV2ZW50RGVmYXVsdCk7Ci0gICAgLy8gR2Vja28gYnJvd3NlcnMgZmlyZSBjb250ZXh0bWVu
dSAqYWZ0ZXIqIG9wZW5pbmcgdGhlIG1lbnUsIGF0Ci0gICAgLy8gd2hpY2ggcG9pbnQgd2UgY2Fu
J3QgbWVzcyB3aXRoIGl0IGFueW1vcmUuIENvbnRleHQgbWVudSBpcwotICAgIC8vIGhhbmRsZWQg
aW4gb25Nb3VzZURvd24gZm9yIEdlY2tvLgotICAgIGlmICghZ2Vja28pIGNvbm5lY3Qoc2Nyb2xs
ZXIsICJjb250ZXh0bWVudSIsIG9uQ29udGV4dE1lbnUpOwotICAgIGNvbm5lY3Qoc2Nyb2xsZXIs
ICJzY3JvbGwiLCBvblNjcm9sbE1haW4pOwotICAgIGNvbm5lY3Qoc2Nyb2xsYmFyLCAic2Nyb2xs
Iiwgb25TY3JvbGxCYXIpOwotICAgIGNvbm5lY3Qoc2Nyb2xsYmFyLCAibW91c2Vkb3duIiwgZnVu
Y3Rpb24oKSB7aWYgKGZvY3VzZWQpIHNldFRpbWVvdXQoZm9jdXNJbnB1dCwgMCk7fSk7Ci0gICAg
Y29ubmVjdCh3aW5kb3csICJyZXNpemUiLCBmdW5jdGlvbigpIHt1cGRhdGVEaXNwbGF5KHRydWUp
O30pOwotICAgIGNvbm5lY3QoaW5wdXQsICJrZXl1cCIsIG9wZXJhdGlvbihvbktleVVwKSk7Ci0g
ICAgY29ubmVjdChpbnB1dCwgImlucHV0IiwgZmFzdFBvbGwpOwotICAgIGNvbm5lY3QoaW5wdXQs
ICJrZXlkb3duIiwgb3BlcmF0aW9uKG9uS2V5RG93bikpOwotICAgIGNvbm5lY3QoaW5wdXQsICJr
ZXlwcmVzcyIsIG9wZXJhdGlvbihvbktleVByZXNzKSk7Ci0gICAgY29ubmVjdChpbnB1dCwgImZv
Y3VzIiwgb25Gb2N1cyk7Ci0gICAgY29ubmVjdChpbnB1dCwgImJsdXIiLCBvbkJsdXIpOworICAv
LyBVc2VkIHRvIGdldCB0aGUgZWRpdG9yIGludG8gYSBjb25zaXN0ZW50IHN0YXRlIGFnYWluIHdo
ZW4gb3B0aW9ucyBjaGFuZ2UuCiAKLSAgICBmdW5jdGlvbiBkcmFnXyhlKSB7Ci0gICAgICBpZiAo
b3B0aW9ucy5vbkRyYWdFdmVudCAmJiBvcHRpb25zLm9uRHJhZ0V2ZW50KGluc3RhbmNlLCBhZGRT
dG9wKGUpKSkgcmV0dXJuOwotICAgICAgZV9zdG9wKGUpOwotICAgIH0KLSAgICBpZiAob3B0aW9u
cy5kcmFnRHJvcCkgewotICAgICAgY29ubmVjdChzY3JvbGxlciwgImRyYWdzdGFydCIsIG9uRHJh
Z1N0YXJ0KTsKLSAgICAgIGNvbm5lY3Qoc2Nyb2xsZXIsICJkcmFnZW50ZXIiLCBkcmFnXyk7Ci0g
ICAgICBjb25uZWN0KHNjcm9sbGVyLCAiZHJhZ292ZXIiLCBkcmFnXyk7Ci0gICAgICBjb25uZWN0
KHNjcm9sbGVyLCAiZHJvcCIsIG9wZXJhdGlvbihvbkRyb3ApKTsKKyAgZnVuY3Rpb24gbG9hZE1v
ZGUoY20pIHsKKyAgICB2YXIgZG9jID0gY20udmlldy5kb2M7CisgICAgY20udmlldy5tb2RlID0g
Q29kZU1pcnJvci5nZXRNb2RlKGNtLm9wdGlvbnMsIGNtLm9wdGlvbnMubW9kZSk7CisgICAgZG9j
Lml0ZXIoMCwgZG9jLnNpemUsIGZ1bmN0aW9uKGxpbmUpIHsgbGluZS5zdGF0ZUFmdGVyID0gbnVs
bDsgfSk7CisgICAgY20udmlldy5mcm9udGllciA9IDA7CisgICAgc3RhcnRXb3JrZXIoY20sIDEw
MCk7CisgIH0KKworICBmdW5jdGlvbiB3cmFwcGluZ0NoYW5nZWQoY20pIHsKKyAgICB2YXIgZG9j
ID0gY20udmlldy5kb2MsIHRoID0gdGV4dEhlaWdodChjbS5kaXNwbGF5KTsKKyAgICBpZiAoY20u
b3B0aW9ucy5saW5lV3JhcHBpbmcpIHsKKyAgICAgIGNtLmRpc3BsYXkud3JhcHBlci5jbGFzc05h
bWUgKz0gIiBDb2RlTWlycm9yLXdyYXAiOworICAgICAgdmFyIHBlckxpbmUgPSBjbS5kaXNwbGF5
LnNjcm9sbGVyLmNsaWVudFdpZHRoIC8gY2hhcldpZHRoKGNtLmRpc3BsYXkpIC0gMzsKKyAgICAg
IGRvYy5pdGVyKDAsIGRvYy5zaXplLCBmdW5jdGlvbihsaW5lKSB7CisgICAgICAgIGlmIChsaW5l
LmhlaWdodCA9PSAwKSByZXR1cm47CisgICAgICAgIHZhciBndWVzcyA9IE1hdGguY2VpbChsaW5l
LnRleHQubGVuZ3RoIC8gcGVyTGluZSkgfHwgMTsKKyAgICAgICAgaWYgKGd1ZXNzICE9IDEpIHVw
ZGF0ZUxpbmVIZWlnaHQobGluZSwgZ3Vlc3MgKiB0aCk7CisgICAgICB9KTsKKyAgICAgIGNtLmRp
c3BsYXkuc2l6ZXIuc3R5bGUubWluV2lkdGggPSAiIjsKKyAgICB9IGVsc2UgeworICAgICAgY20u
ZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZSA9IGNtLmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUu
cmVwbGFjZSgiIENvZGVNaXJyb3Itd3JhcCIsICIiKTsKKyAgICAgIGNvbXB1dGVNYXhMZW5ndGgo
Y20udmlldyk7CisgICAgICBkb2MuaXRlcigwLCBkb2Muc2l6ZSwgZnVuY3Rpb24obGluZSkgewor
ICAgICAgICBpZiAobGluZS5oZWlnaHQgIT0gMCkgdXBkYXRlTGluZUhlaWdodChsaW5lLCB0aCk7
CisgICAgICB9KTsKICAgICB9Ci0gICAgY29ubmVjdChzY3JvbGxlciwgInBhc3RlIiwgZnVuY3Rp
b24oKXtmb2N1c0lucHV0KCk7IGZhc3RQb2xsKCk7fSk7Ci0gICAgY29ubmVjdChpbnB1dCwgInBh
c3RlIiwgZmFzdFBvbGwpOwotICAgIGNvbm5lY3QoaW5wdXQsICJjdXQiLCBvcGVyYXRpb24oZnVu
Y3Rpb24oKXsKLSAgICAgIGlmICghb3B0aW9ucy5yZWFkT25seSkgcmVwbGFjZVNlbGVjdGlvbigi
Iik7Ci0gICAgfSkpOworICAgIHJlZ0NoYW5nZShjbSwgMCwgZG9jLnNpemUpOworICB9CiAKLSAg
ICAvLyBOZWVkZWQgdG8gaGFuZGxlIFRhYiBrZXkgaW4gS0hUTUwKLSAgICBpZiAoa2h0bWwpIGNv
bm5lY3Qoc2l6ZXIsICJtb3VzZXVwIiwgZnVuY3Rpb24oKSB7Ci0gICAgICAgIGlmIChkb2N1bWVu
dC5hY3RpdmVFbGVtZW50ID09IGlucHV0KSBpbnB1dC5ibHVyKCk7Ci0gICAgICAgIGZvY3VzSW5w
dXQoKTsKLSAgICB9KTsKKyAgZnVuY3Rpb24ga2V5TWFwQ2hhbmdlZChjbSkgeworICAgIHZhciBz
dHlsZSA9IGtleU1hcFtjbS5vcHRpb25zLmtleU1hcF0uc3R5bGU7CisgICAgY20uZGlzcGxheS53
cmFwcGVyLmNsYXNzTmFtZSA9IGNtLmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUucmVwbGFjZSgv
XHMqY20ta2V5bWFwLVxTKy9nLCAiIikgKworICAgICAgKHN0eWxlID8gIiBjbS1rZXltYXAtIiAr
IHN0eWxlIDogIiIpOworICB9CiAKLSAgICAvLyBJRSB0aHJvd3MgdW5zcGVjaWZpZWQgZXJyb3Ig
aW4gY2VydGFpbiBjYXNlcywgd2hlbgotICAgIC8vIHRyeWluZyB0byBhY2Nlc3MgYWN0aXZlRWxl
bWVudCBiZWZvcmUgb25sb2FkCi0gICAgdmFyIGhhc0ZvY3VzOyB0cnkgeyBoYXNGb2N1cyA9IChk
b2N1bWVudC5hY3RpdmVFbGVtZW50ID09IGlucHV0KTsgfSBjYXRjaChlKSB7IH0KLSAgICBpZiAo
aGFzRm9jdXMgfHwgb3B0aW9ucy5hdXRvZm9jdXMpIHNldFRpbWVvdXQob25Gb2N1cywgMjApOwot
ICAgIGVsc2Ugb25CbHVyKCk7Ci0KLSAgICBmdW5jdGlvbiBpc0xpbmUobCkge3JldHVybiBsID49
IDAgJiYgbCA8IGRvYy5zaXplO30KLSAgICAvLyBUaGUgaW5zdGFuY2Ugb2JqZWN0IHRoYXQgd2Un
bGwgcmV0dXJuLiBNb3N0bHkgY2FsbHMgb3V0IHRvCi0gICAgLy8gbG9jYWwgZnVuY3Rpb25zIGlu
IHRoZSBDb2RlTWlycm9yIGZ1bmN0aW9uLiBTb21lIGRvIHNvbWUgZXh0cmEKLSAgICAvLyByYW5n
ZSBjaGVja2luZyBhbmQvb3IgY2xpcHBpbmcuIG9wZXJhdGlvbiBpcyB1c2VkIHRvIHdyYXAgdGhl
Ci0gICAgLy8gY2FsbCBzbyB0aGF0IGNoYW5nZXMgaXQgbWFrZXMgYXJlIHRyYWNrZWQsIGFuZCB0
aGUgZGlzcGxheSBpcwotICAgIC8vIHVwZGF0ZWQgYWZ0ZXJ3YXJkcy4KLSAgICB2YXIgaW5zdGFu
Y2UgPSB3cmFwcGVyLkNvZGVNaXJyb3IgPSB7Ci0gICAgICBnZXRWYWx1ZTogZ2V0VmFsdWUsCi0g
ICAgICBzZXRWYWx1ZTogb3BlcmF0aW9uKHNldFZhbHVlKSwKLSAgICAgIGdldFNlbGVjdGlvbjog
Z2V0U2VsZWN0aW9uLAotICAgICAgcmVwbGFjZVNlbGVjdGlvbjogb3BlcmF0aW9uKHJlcGxhY2VT
ZWxlY3Rpb24pLAotICAgICAgZm9jdXM6IGZ1bmN0aW9uKCl7d2luZG93LmZvY3VzKCk7IGZvY3Vz
SW5wdXQoKTsgb25Gb2N1cygpOyBmYXN0UG9sbCgpO30sCi0gICAgICBzZXRPcHRpb246IGZ1bmN0
aW9uKG9wdGlvbiwgdmFsdWUpIHsKLSAgICAgICAgdmFyIG9sZFZhbCA9IG9wdGlvbnNbb3B0aW9u
XTsKLSAgICAgICAgb3B0aW9uc1tvcHRpb25dID0gdmFsdWU7Ci0gICAgICAgIGlmIChvcHRpb24g
PT0gIm1vZGUiIHx8IG9wdGlvbiA9PSAiaW5kZW50VW5pdCIpIGxvYWRNb2RlKCk7Ci0gICAgICAg
IGVsc2UgaWYgKG9wdGlvbiA9PSAicmVhZE9ubHkiICYmIHZhbHVlID09ICJub2N1cnNvciIpIHtv
bkJsdXIoKTsgaW5wdXQuYmx1cigpO30KLSAgICAgICAgZWxzZSBpZiAob3B0aW9uID09ICJyZWFk
T25seSIgJiYgIXZhbHVlKSB7cmVzZXRJbnB1dCh0cnVlKTt9Ci0gICAgICAgIGVsc2UgaWYgKG9w
dGlvbiA9PSAidGhlbWUiKSB0aGVtZUNoYW5nZWQoKTsKLSAgICAgICAgZWxzZSBpZiAob3B0aW9u
ID09ICJsaW5lV3JhcHBpbmciICYmIG9sZFZhbCAhPSB2YWx1ZSkgb3BlcmF0aW9uKHdyYXBwaW5n
Q2hhbmdlZCkoKTsKLSAgICAgICAgZWxzZSBpZiAob3B0aW9uID09ICJ0YWJTaXplIikgdXBkYXRl
RGlzcGxheSh0cnVlKTsKLSAgICAgICAgZWxzZSBpZiAob3B0aW9uID09ICJrZXlNYXAiKSBrZXlN
YXBDaGFuZ2VkKCk7Ci0gICAgICAgIGlmIChvcHRpb24gPT0gImxpbmVOdW1iZXJzIiB8fCBvcHRp
b24gPT0gImd1dHRlciIgfHwgb3B0aW9uID09ICJmaXJzdExpbmVOdW1iZXIiIHx8Ci0gICAgICAg
ICAgICBvcHRpb24gPT0gInRoZW1lIiB8fCBvcHRpb24gPT0gImxpbmVOdW1iZXJGb3JtYXR0ZXIi
KSB7Ci0gICAgICAgICAgZ3V0dGVyQ2hhbmdlZCgpOwotICAgICAgICAgIHVwZGF0ZURpc3BsYXko
dHJ1ZSk7Ci0gICAgICAgIH0KLSAgICAgIH0sCi0gICAgICBnZXRPcHRpb246IGZ1bmN0aW9uKG9w
dGlvbikge3JldHVybiBvcHRpb25zW29wdGlvbl07fSwKLSAgICAgIHVuZG86IG9wZXJhdGlvbih1
bmRvKSwKLSAgICAgIHJlZG86IG9wZXJhdGlvbihyZWRvKSwKLSAgICAgIGluZGVudExpbmU6IG9w
ZXJhdGlvbihmdW5jdGlvbihuLCBkaXIpIHsKLSAgICAgICAgaWYgKHR5cGVvZiBkaXIgIT0gInN0
cmluZyIpIHsKLSAgICAgICAgICBpZiAoZGlyID09IG51bGwpIGRpciA9IG9wdGlvbnMuc21hcnRJ
bmRlbnQgPyAic21hcnQiIDogInByZXYiOwotICAgICAgICAgIGVsc2UgZGlyID0gZGlyID8gImFk
ZCIgOiAic3VidHJhY3QiOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpc0xpbmUobikpIGluZGVu
dExpbmUobiwgZGlyKTsKLSAgICAgIH0pLAotICAgICAgaW5kZW50U2VsZWN0aW9uOiBvcGVyYXRp
b24oaW5kZW50U2VsZWN0ZWQpLAotICAgICAgaGlzdG9yeVNpemU6IGZ1bmN0aW9uKCkge3JldHVy
biB7dW5kbzogaGlzdG9yeS5kb25lLmxlbmd0aCwgcmVkbzogaGlzdG9yeS51bmRvbmUubGVuZ3Ro
fTt9LAotICAgICAgY2xlYXJIaXN0b3J5OiBmdW5jdGlvbigpIHtoaXN0b3J5ID0gbmV3IEhpc3Rv
cnkoKTt9LAotICAgICAgc2V0SGlzdG9yeTogZnVuY3Rpb24oaGlzdERhdGEpIHsKLSAgICAgICAg
aGlzdG9yeSA9IG5ldyBIaXN0b3J5KCk7Ci0gICAgICAgIGhpc3RvcnkuZG9uZSA9IGhpc3REYXRh
LmRvbmU7Ci0gICAgICAgIGhpc3RvcnkudW5kb25lID0gaGlzdERhdGEudW5kb25lOwotICAgICAg
fSwKLSAgICAgIGdldEhpc3Rvcnk6IGZ1bmN0aW9uKCkgewotICAgICAgICBoaXN0b3J5LnRpbWUg
PSAwOwotICAgICAgICByZXR1cm4ge2RvbmU6IGhpc3RvcnkuZG9uZS5jb25jYXQoW10pLCB1bmRv
bmU6IGhpc3RvcnkudW5kb25lLmNvbmNhdChbXSl9OwotICAgICAgfSwKLSAgICAgIG1hdGNoQnJh
Y2tldHM6IG9wZXJhdGlvbihmdW5jdGlvbigpe21hdGNoQnJhY2tldHModHJ1ZSk7fSksCi0gICAg
ICBnZXRUb2tlbkF0OiBvcGVyYXRpb24oZnVuY3Rpb24ocG9zKSB7Ci0gICAgICAgIHBvcyA9IGNs
aXBQb3MocG9zKTsKLSAgICAgICAgcmV0dXJuIGdldExpbmUocG9zLmxpbmUpLmdldFRva2VuQXQo
bW9kZSwgZ2V0U3RhdGVCZWZvcmUocG9zLmxpbmUpLCBvcHRpb25zLnRhYlNpemUsIHBvcy5jaCk7
Ci0gICAgICB9KSwKLSAgICAgIGdldFN0YXRlQWZ0ZXI6IGZ1bmN0aW9uKGxpbmUpIHsKLSAgICAg
ICAgbGluZSA9IGNsaXBMaW5lKGxpbmUgPT0gbnVsbCA/IGRvYy5zaXplIC0gMTogbGluZSk7Ci0g
ICAgICAgIHJldHVybiBnZXRTdGF0ZUJlZm9yZShsaW5lICsgMSk7Ci0gICAgICB9LAotICAgICAg
Y3Vyc29yQ29vcmRzOiBmdW5jdGlvbihzdGFydCwgbW9kZSkgewotICAgICAgICBpZiAoc3RhcnQg
PT0gbnVsbCkgc3RhcnQgPSBzZWwuaW52ZXJ0ZWQ7Ci0gICAgICAgIHJldHVybiB0aGlzLmNoYXJD
b29yZHMoc3RhcnQgPyBzZWwuZnJvbSA6IHNlbC50bywgbW9kZSk7Ci0gICAgICB9LAotICAgICAg
Y2hhckNvb3JkczogZnVuY3Rpb24ocG9zLCBtb2RlKSB7Ci0gICAgICAgIHBvcyA9IGNsaXBQb3Mo
cG9zKTsKLSAgICAgICAgaWYgKG1vZGUgPT0gImxvY2FsIikgcmV0dXJuIGxvY2FsQ29vcmRzKHBv
cywgZmFsc2UpOwotICAgICAgICBpZiAobW9kZSA9PSAiZGl2IikgcmV0dXJuIGxvY2FsQ29vcmRz
KHBvcywgdHJ1ZSk7Ci0gICAgICAgIHJldHVybiBwYWdlQ29vcmRzKHBvcyk7Ci0gICAgICB9LAot
ICAgICAgY29vcmRzQ2hhcjogZnVuY3Rpb24oY29vcmRzKSB7Ci0gICAgICAgIHZhciBvZmYgPSBl
bHRPZmZzZXQobGluZVNwYWNlKTsKLSAgICAgICAgcmV0dXJuIGNvb3Jkc0NoYXIoY29vcmRzLngg
LSBvZmYubGVmdCwgY29vcmRzLnkgLSBvZmYudG9wKTsKLSAgICAgIH0sCi0gICAgICBtYXJrVGV4
dDogb3BlcmF0aW9uKG1hcmtUZXh0KSwKLSAgICAgIHNldEJvb2ttYXJrOiBzZXRCb29rbWFyaywK
LSAgICAgIGZpbmRNYXJrc0F0OiBmaW5kTWFya3NBdCwKLSAgICAgIHNldE1hcmtlcjogb3BlcmF0
aW9uKGFkZEd1dHRlck1hcmtlciksCi0gICAgICBjbGVhck1hcmtlcjogb3BlcmF0aW9uKHJlbW92
ZUd1dHRlck1hcmtlciksCi0gICAgICBzZXRMaW5lQ2xhc3M6IG9wZXJhdGlvbihzZXRMaW5lQ2xh
c3MpLAotICAgICAgaGlkZUxpbmU6IG9wZXJhdGlvbihmdW5jdGlvbihoKSB7cmV0dXJuIHNldExp
bmVIaWRkZW4oaCwgdHJ1ZSk7fSksCi0gICAgICBzaG93TGluZTogb3BlcmF0aW9uKGZ1bmN0aW9u
KGgpIHtyZXR1cm4gc2V0TGluZUhpZGRlbihoLCBmYWxzZSk7fSksCi0gICAgICBvbkRlbGV0ZUxp
bmU6IGZ1bmN0aW9uKGxpbmUsIGYpIHsKLSAgICAgICAgaWYgKHR5cGVvZiBsaW5lID09ICJudW1i
ZXIiKSB7Ci0gICAgICAgICAgaWYgKCFpc0xpbmUobGluZSkpIHJldHVybiBudWxsOwotICAgICAg
ICAgIGxpbmUgPSBnZXRMaW5lKGxpbmUpOwotICAgICAgICB9Ci0gICAgICAgIChsaW5lLmhhbmRs
ZXJzIHx8IChsaW5lLmhhbmRsZXJzID0gW10pKS5wdXNoKGYpOwotICAgICAgICByZXR1cm4gbGlu
ZTsKLSAgICAgIH0sCi0gICAgICBsaW5lSW5mbzogbGluZUluZm8sCi0gICAgICBhZGRXaWRnZXQ6
IGZ1bmN0aW9uKHBvcywgbm9kZSwgc2Nyb2xsLCB2ZXJ0LCBob3JpeikgewotICAgICAgICBwb3Mg
PSBsb2NhbENvb3JkcyhjbGlwUG9zKHBvcykpOwotICAgICAgICB2YXIgdG9wID0gcG9zLnlCb3Qs
IGxlZnQgPSBwb3MueDsKLSAgICAgICAgbm9kZS5zdHlsZS5wb3NpdGlvbiA9ICJhYnNvbHV0ZSI7
Ci0gICAgICAgIHNpemVyLmFwcGVuZENoaWxkKG5vZGUpOwotICAgICAgICBpZiAodmVydCA9PSAi
b3ZlciIpIHRvcCA9IHBvcy55OwotICAgICAgICBlbHNlIGlmICh2ZXJ0ID09ICJuZWFyIikgewot
ICAgICAgICAgIHZhciB2c3BhY2UgPSBNYXRoLm1heChzY3JvbGxlci5vZmZzZXRIZWlnaHQsIGRv
Yy5oZWlnaHQgKiB0ZXh0SGVpZ2h0KCkpLAotICAgICAgICAgICAgICBoc3BhY2UgPSBNYXRoLm1h
eChzaXplci5jbGllbnRXaWR0aCwgbGluZVNwYWNlLmNsaWVudFdpZHRoKSAtIHBhZGRpbmdMZWZ0
KCk7Ci0gICAgICAgICAgaWYgKHBvcy55Qm90ICsgbm9kZS5vZmZzZXRIZWlnaHQgPiB2c3BhY2Ug
JiYgcG9zLnkgPiBub2RlLm9mZnNldEhlaWdodCkKLSAgICAgICAgICAgIHRvcCA9IHBvcy55IC0g
bm9kZS5vZmZzZXRIZWlnaHQ7Ci0gICAgICAgICAgaWYgKGxlZnQgKyBub2RlLm9mZnNldFdpZHRo
ID4gaHNwYWNlKQotICAgICAgICAgICAgbGVmdCA9IGhzcGFjZSAtIG5vZGUub2Zmc2V0V2lkdGg7
Ci0gICAgICAgIH0KLSAgICAgICAgbm9kZS5zdHlsZS50b3AgPSAodG9wICsgcGFkZGluZ1RvcCgp
KSArICJweCI7Ci0gICAgICAgIG5vZGUuc3R5bGUubGVmdCA9IG5vZGUuc3R5bGUucmlnaHQgPSAi
IjsKLSAgICAgICAgaWYgKGhvcml6ID09ICJyaWdodCIpIHsKLSAgICAgICAgICBsZWZ0ID0gc2l6
ZXIuY2xpZW50V2lkdGggLSBub2RlLm9mZnNldFdpZHRoOwotICAgICAgICAgIG5vZGUuc3R5bGUu
cmlnaHQgPSAiMHB4IjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBpZiAoaG9yaXogPT0g
ImxlZnQiKSBsZWZ0ID0gMDsKLSAgICAgICAgICBlbHNlIGlmIChob3JpeiA9PSAibWlkZGxlIikg
bGVmdCA9IChzaXplci5jbGllbnRXaWR0aCAtIG5vZGUub2Zmc2V0V2lkdGgpIC8gMjsKLSAgICAg
ICAgICBub2RlLnN0eWxlLmxlZnQgPSAobGVmdCArIHBhZGRpbmdMZWZ0KCkpICsgInB4IjsKLSAg
ICAgICAgfQotICAgICAgICBpZiAoc2Nyb2xsKQotICAgICAgICAgIHNjcm9sbEludG9WaWV3KGxl
ZnQsIHRvcCwgbGVmdCArIG5vZGUub2Zmc2V0V2lkdGgsIHRvcCArIG5vZGUub2Zmc2V0SGVpZ2h0
KTsKLSAgICAgIH0sCi0KLSAgICAgIGxpbmVDb3VudDogZnVuY3Rpb24oKSB7cmV0dXJuIGRvYy5z
aXplO30sCi0gICAgICBjbGlwUG9zOiBjbGlwUG9zLAotICAgICAgZ2V0Q3Vyc29yOiBmdW5jdGlv
bihzdGFydCkgewotICAgICAgICBpZiAoc3RhcnQgPT0gbnVsbCkgc3RhcnQgPSBzZWwuaW52ZXJ0
ZWQ7Ci0gICAgICAgIHJldHVybiBjb3B5UG9zKHN0YXJ0ID8gc2VsLmZyb20gOiBzZWwudG8pOwot
ICAgICAgfSwKLSAgICAgIHNvbWV0aGluZ1NlbGVjdGVkOiBmdW5jdGlvbigpIHtyZXR1cm4gIXBv
c0VxKHNlbC5mcm9tLCBzZWwudG8pO30sCi0gICAgICBzZXRDdXJzb3I6IG9wZXJhdGlvbihmdW5j
dGlvbihsaW5lLCBjaCwgdXNlcikgewotICAgICAgICBpZiAoY2ggPT0gbnVsbCAmJiB0eXBlb2Yg
bGluZS5saW5lID09ICJudW1iZXIiKSBzZXRDdXJzb3IobGluZS5saW5lLCBsaW5lLmNoLCB1c2Vy
KTsKLSAgICAgICAgZWxzZSBzZXRDdXJzb3IobGluZSwgY2gsIHVzZXIpOwotICAgICAgfSksCi0g
ICAgICBzZXRTZWxlY3Rpb246IG9wZXJhdGlvbihmdW5jdGlvbihmcm9tLCB0bywgdXNlcikgewot
ICAgICAgICAodXNlciA/IHNldFNlbGVjdGlvblVzZXIgOiBzZXRTZWxlY3Rpb24pKGNsaXBQb3Mo
ZnJvbSksIGNsaXBQb3ModG8gfHwgZnJvbSkpOwotICAgICAgfSksCi0gICAgICBnZXRMaW5lOiBm
dW5jdGlvbihsaW5lKSB7aWYgKGlzTGluZShsaW5lKSkgcmV0dXJuIGdldExpbmUobGluZSkudGV4
dDt9LAotICAgICAgZ2V0TGluZUhhbmRsZTogZnVuY3Rpb24obGluZSkge2lmIChpc0xpbmUobGlu
ZSkpIHJldHVybiBnZXRMaW5lKGxpbmUpO30sCi0gICAgICBzZXRMaW5lOiBvcGVyYXRpb24oZnVu
Y3Rpb24obGluZSwgdGV4dCkgewotICAgICAgICBpZiAoaXNMaW5lKGxpbmUpKSByZXBsYWNlUmFu
Z2UodGV4dCwge2xpbmU6IGxpbmUsIGNoOiAwfSwge2xpbmU6IGxpbmUsIGNoOiBnZXRMaW5lKGxp
bmUpLnRleHQubGVuZ3RofSk7Ci0gICAgICB9KSwKLSAgICAgIHJlbW92ZUxpbmU6IG9wZXJhdGlv
bihmdW5jdGlvbihsaW5lKSB7Ci0gICAgICAgIGlmIChpc0xpbmUobGluZSkpIHJlcGxhY2VSYW5n
ZSgiIiwge2xpbmU6IGxpbmUsIGNoOiAwfSwgY2xpcFBvcyh7bGluZTogbGluZSsxLCBjaDogMH0p
KTsKLSAgICAgIH0pLAotICAgICAgcmVwbGFjZVJhbmdlOiBvcGVyYXRpb24ocmVwbGFjZVJhbmdl
KSwKLSAgICAgIGdldFJhbmdlOiBmdW5jdGlvbihmcm9tLCB0bywgbGluZVNlcCkge3JldHVybiBn
ZXRSYW5nZShjbGlwUG9zKGZyb20pLCBjbGlwUG9zKHRvKSwgbGluZVNlcCk7fSwKLQotICAgICAg
dHJpZ2dlck9uS2V5RG93bjogb3BlcmF0aW9uKG9uS2V5RG93biksCi0gICAgICBleGVjQ29tbWFu
ZDogZnVuY3Rpb24oY21kKSB7cmV0dXJuIGNvbW1hbmRzW2NtZF0oaW5zdGFuY2UpO30sCi0gICAg
ICAvLyBTdHVmZiB1c2VkIGJ5IGNvbW1hbmRzLCBwcm9iYWJseSBub3QgbXVjaCB1c2UgdG8gb3V0
c2lkZSBjb2RlLgotICAgICAgbW92ZUg6IG9wZXJhdGlvbihtb3ZlSCksCi0gICAgICBkZWxldGVI
OiBvcGVyYXRpb24oZGVsZXRlSCksCi0gICAgICBtb3ZlVjogb3BlcmF0aW9uKG1vdmVWKSwKLSAg
ICAgIHRvZ2dsZU92ZXJ3cml0ZTogZnVuY3Rpb24oKSB7Ci0gICAgICAgIGlmKG92ZXJ3cml0ZSl7
Ci0gICAgICAgICAgb3ZlcndyaXRlID0gZmFsc2U7Ci0gICAgICAgICAgY3Vyc29yLmNsYXNzTmFt
ZSA9IGN1cnNvci5jbGFzc05hbWUucmVwbGFjZSgiIENvZGVNaXJyb3Itb3ZlcndyaXRlIiwgIiIp
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIG92ZXJ3cml0ZSA9IHRydWU7Ci0gICAgICAg
ICAgY3Vyc29yLmNsYXNzTmFtZSArPSAiIENvZGVNaXJyb3Itb3ZlcndyaXRlIjsKLSAgICAgICAg
fQotICAgICAgfSwKLQotICAgICAgcG9zRnJvbUluZGV4OiBmdW5jdGlvbihvZmYpIHsKLSAgICAg
ICAgdmFyIGxpbmVObyA9IDAsIGNoOwotICAgICAgICBkb2MuaXRlcigwLCBkb2Muc2l6ZSwgZnVu
Y3Rpb24obGluZSkgewotICAgICAgICAgIHZhciBzeiA9IGxpbmUudGV4dC5sZW5ndGggKyAxOwot
ICAgICAgICAgIGlmIChzeiA+IG9mZikgeyBjaCA9IG9mZjsgcmV0dXJuIHRydWU7IH0KLSAgICAg
ICAgICBvZmYgLT0gc3o7Ci0gICAgICAgICAgKytsaW5lTm87Ci0gICAgICAgIH0pOwotICAgICAg
ICByZXR1cm4gY2xpcFBvcyh7bGluZTogbGluZU5vLCBjaDogY2h9KTsKLSAgICAgIH0sCi0gICAg
ICBpbmRleEZyb21Qb3M6IGZ1bmN0aW9uIChjb29yZHMpIHsKLSAgICAgICAgaWYgKGNvb3Jkcy5s
aW5lIDwgMCB8fCBjb29yZHMuY2ggPCAwKSByZXR1cm4gMDsKLSAgICAgICAgdmFyIGluZGV4ID0g
Y29vcmRzLmNoOwotICAgICAgICBkb2MuaXRlcigwLCBjb29yZHMubGluZSwgZnVuY3Rpb24gKGxp
bmUpIHsKLSAgICAgICAgICBpbmRleCArPSBsaW5lLnRleHQubGVuZ3RoICsgMTsKLSAgICAgICAg
fSk7Ci0gICAgICAgIHJldHVybiBpbmRleDsKLSAgICAgIH0sCi0gICAgICBzY3JvbGxUbzogZnVu
Y3Rpb24oeCwgeSkgewotICAgICAgICBpZiAoeCAhPSBudWxsKSBzY3JvbGxlci5zY3JvbGxMZWZ0
ID0geDsKLSAgICAgICAgaWYgKHkgIT0gbnVsbCkgc2Nyb2xsYmFyLnNjcm9sbFRvcCA9IHNjcm9s
bGVyLnNjcm9sbFRvcCA9IHk7Ci0gICAgICAgIHVwZGF0ZURpc3BsYXkoW10pOwotICAgICAgfSwK
LSAgICAgIGdldFNjcm9sbEluZm86IGZ1bmN0aW9uKCkgewotICAgICAgICByZXR1cm4ge3g6IHNj
cm9sbGVyLnNjcm9sbExlZnQsIHk6IHNjcm9sbGJhci5zY3JvbGxUb3AsCi0gICAgICAgICAgICAg
ICAgaGVpZ2h0OiBzY3JvbGxiYXIuc2Nyb2xsSGVpZ2h0LCB3aWR0aDogc2Nyb2xsZXIuc2Nyb2xs
V2lkdGh9OwotICAgICAgfSwKLSAgICAgIHNldFNpemU6IGZ1bmN0aW9uKHdpZHRoLCBoZWlnaHQp
IHsKLSAgICAgICAgZnVuY3Rpb24gaW50ZXJwcmV0KHZhbCkgewotICAgICAgICAgIHZhbCA9IFN0
cmluZyh2YWwpOwotICAgICAgICAgIHJldHVybiAvXlxkKyQvLnRlc3QodmFsKSA/IHZhbCArICJw
eCIgOiB2YWw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHdpZHRoICE9IG51bGwpIHdyYXBwZXIu
c3R5bGUud2lkdGggPSBpbnRlcnByZXQod2lkdGgpOwotICAgICAgICBpZiAoaGVpZ2h0ICE9IG51
bGwpIHNjcm9sbGVyLnN0eWxlLmhlaWdodCA9IGludGVycHJldChoZWlnaHQpOwotICAgICAgICBp
bnN0YW5jZS5yZWZyZXNoKCk7Ci0gICAgICB9LAotCi0gICAgICBvcGVyYXRpb246IGZ1bmN0aW9u
KGYpe3JldHVybiBvcGVyYXRpb24oZikoKTt9LAotICAgICAgY29tcG91bmRDaGFuZ2U6IGZ1bmN0
aW9uKGYpe3JldHVybiBjb21wb3VuZENoYW5nZShmKTt9LAotICAgICAgcmVmcmVzaDogZnVuY3Rp
b24oKXsKLSAgICAgICAgdXBkYXRlRGlzcGxheSh0cnVlLCBudWxsLCBsYXN0U2Nyb2xsVG9wKTsK
LSAgICAgICAgaWYgKHNjcm9sbGJhci5zY3JvbGxIZWlnaHQgPiBsYXN0U2Nyb2xsVG9wKQotICAg
ICAgICAgIHNjcm9sbGJhci5zY3JvbGxUb3AgPSBsYXN0U2Nyb2xsVG9wOwotICAgICAgfSwKLSAg
ICAgIGdldElucHV0RmllbGQ6IGZ1bmN0aW9uKCl7cmV0dXJuIGlucHV0O30sCi0gICAgICBnZXRX
cmFwcGVyRWxlbWVudDogZnVuY3Rpb24oKXtyZXR1cm4gd3JhcHBlcjt9LAotICAgICAgZ2V0U2Ny
b2xsZXJFbGVtZW50OiBmdW5jdGlvbigpe3JldHVybiBzY3JvbGxlcjt9LAotICAgICAgZ2V0R3V0
dGVyRWxlbWVudDogZnVuY3Rpb24oKXtyZXR1cm4gZ3V0dGVyO30KLSAgICB9OworICBmdW5jdGlv
biB0aGVtZUNoYW5nZWQoY20pIHsKKyAgICBjbS5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lID0g
Y20uZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZS5yZXBsYWNlKC9ccypjbS1zLVxTKy9nLCAiIikg
KworICAgICAgY20ub3B0aW9ucy50aGVtZS5yZXBsYWNlKC8oXnxccylccyovZywgIiBjbS1zLSIp
OworICB9CisKKyAgZnVuY3Rpb24gZ3V0dGVyc0NoYW5nZWQoY20pIHsKKyAgICB1cGRhdGVHdXR0
ZXJzKGNtKTsKKyAgICB1cGRhdGVEaXNwbGF5KGNtLCB0cnVlKTsKKyAgfQogCi0gICAgZnVuY3Rp
b24gZ2V0TGluZShuKSB7IHJldHVybiBnZXRMaW5lQXQoZG9jLCBuKTsgfQotICAgIGZ1bmN0aW9u
IHVwZGF0ZUxpbmVIZWlnaHQobGluZSwgaGVpZ2h0KSB7Ci0gICAgICBndXR0ZXJEaXJ0eSA9IHRy
dWU7Ci0gICAgICB2YXIgZGlmZiA9IGhlaWdodCAtIGxpbmUuaGVpZ2h0OwotICAgICAgZm9yICh2
YXIgbiA9IGxpbmU7IG47IG4gPSBuLnBhcmVudCkgbi5oZWlnaHQgKz0gZGlmZjsKKyAgZnVuY3Rp
b24gdXBkYXRlR3V0dGVycyhjbSkgeworICAgIHZhciBndXR0ZXJzID0gY20uZGlzcGxheS5ndXR0
ZXJzLCBzcGVjcyA9IGNtLm9wdGlvbnMuZ3V0dGVyczsKKyAgICByZW1vdmVDaGlsZHJlbihndXR0
ZXJzKTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNwZWNzLmxlbmd0aDsgKytpKSB7CisgICAg
ICB2YXIgZ3V0dGVyQ2xhc3MgPSBzcGVjc1tpXTsKKyAgICAgIHZhciBnRWx0ID0gZ3V0dGVycy5h
cHBlbmRDaGlsZChlbHQoImRpdiIsIG51bGwsICJDb2RlTWlycm9yLWd1dHRlciAiICsgZ3V0dGVy
Q2xhc3MpKTsKKyAgICAgIGlmIChndXR0ZXJDbGFzcyA9PSAiQ29kZU1pcnJvci1saW5lbnVtYmVy
cyIpIHsKKyAgICAgICAgY20uZGlzcGxheS5saW5lR3V0dGVyID0gZ0VsdDsKKyAgICAgICAgZ0Vs
dC5zdHlsZS53aWR0aCA9IChjbS5kaXNwbGF5LmxpbmVOdW1XaWR0aCB8fCAxKSArICJweCI7Cisg
ICAgICB9CiAgICAgfQorICAgIGd1dHRlcnMuc3R5bGUuZGlzcGxheSA9IGkgPyAiIiA6ICJub25l
IjsKKyAgfQogCi0gICAgZnVuY3Rpb24gc2V0VmFsdWUoY29kZSkgewotICAgICAgdmFyIHRvcCA9
IHtsaW5lOiAwLCBjaDogMH07Ci0gICAgICB1cGRhdGVMaW5lcyh0b3AsIHtsaW5lOiBkb2Muc2l6
ZSAtIDEsIGNoOiBnZXRMaW5lKGRvYy5zaXplLTEpLnRleHQubGVuZ3RofSwKLSAgICAgICAgICAg
ICAgICAgIHNwbGl0TGluZXMoY29kZSksIHRvcCwgdG9wKTsKLSAgICAgIHVwZGF0ZUlucHV0ID0g
dHJ1ZTsKKyAgZnVuY3Rpb24gbGluZUxlbmd0aChkb2MsIGxpbmUpIHsKKyAgICBpZiAobGluZS5o
ZWlnaHQgPT0gMCkgcmV0dXJuIDA7CisgICAgdmFyIGxlbiA9IGxpbmUudGV4dC5sZW5ndGgsIG1l
cmdlZCwgY3VyID0gbGluZTsKKyAgICB3aGlsZSAobWVyZ2VkID0gY29sbGFwc2VkU3BhbkF0U3Rh
cnQoY3VyKSkgeworICAgICAgdmFyIGZvdW5kID0gbWVyZ2VkLmZpbmQoKTsKKyAgICAgIGN1ciA9
IGdldExpbmUoZG9jLCBmb3VuZC5mcm9tLmxpbmUpOworICAgICAgbGVuICs9IGZvdW5kLmZyb20u
Y2ggLSBmb3VuZC50by5jaDsKICAgICB9Ci0gICAgZnVuY3Rpb24gZ2V0VmFsdWUobGluZVNlcCkg
ewotICAgICAgdmFyIHRleHQgPSBbXTsKLSAgICAgIGRvYy5pdGVyKDAsIGRvYy5zaXplLCBmdW5j
dGlvbihsaW5lKSB7IHRleHQucHVzaChsaW5lLnRleHQpOyB9KTsKLSAgICAgIHJldHVybiB0ZXh0
LmpvaW4obGluZVNlcCB8fCAiXG4iKTsKKyAgICBjdXIgPSBsaW5lOworICAgIHdoaWxlIChtZXJn
ZWQgPSBjb2xsYXBzZWRTcGFuQXRFbmQoY3VyKSkgeworICAgICAgdmFyIGZvdW5kID0gbWVyZ2Vk
LmZpbmQoKTsKKyAgICAgIGxlbiAtPSBjdXIudGV4dC5sZW5ndGggLSBmb3VuZC5mcm9tLmNoOwor
ICAgICAgY3VyID0gZ2V0TGluZShkb2MsIGZvdW5kLnRvLmxpbmUpOworICAgICAgbGVuICs9IGN1
ci50ZXh0Lmxlbmd0aCAtIGZvdW5kLnRvLmNoOwogICAgIH0KKyAgICByZXR1cm4gbGVuOworICB9
CisKKyAgZnVuY3Rpb24gY29tcHV0ZU1heExlbmd0aCh2aWV3KSB7CisgICAgdmlldy5tYXhMaW5l
ID0gZ2V0TGluZSh2aWV3LmRvYywgMCk7CisgICAgdmlldy5tYXhMaW5lTGVuZ3RoID0gbGluZUxl
bmd0aCh2aWV3LmRvYywgdmlldy5tYXhMaW5lKTsKKyAgICB2aWV3Lm1heExpbmVDaGFuZ2VkID0g
dHJ1ZTsKKyAgICB2aWV3LmRvYy5pdGVyKDEsIHZpZXcuZG9jLnNpemUsIGZ1bmN0aW9uKGxpbmUp
IHsKKyAgICAgIHZhciBsZW4gPSBsaW5lTGVuZ3RoKHZpZXcuZG9jLCBsaW5lKTsKKyAgICAgIGlm
IChsZW4gPiB2aWV3Lm1heExpbmVMZW5ndGgpIHsKKyAgICAgICAgdmlldy5tYXhMaW5lTGVuZ3Ro
ID0gbGVuOworICAgICAgICB2aWV3Lm1heExpbmUgPSBsaW5lOworICAgICAgfQorICAgIH0pOwor
ICB9CiAKLSAgICBmdW5jdGlvbiBvblNjcm9sbEJhcihlKSB7Ci0gICAgICBpZiAoc2Nyb2xsYmFy
LnNjcm9sbFRvcCAhPSBsYXN0U2Nyb2xsVG9wKSB7Ci0gICAgICAgIGxhc3RTY3JvbGxUb3AgPSBz
Y3JvbGxlci5zY3JvbGxUb3AgPSBzY3JvbGxiYXIuc2Nyb2xsVG9wOwotICAgICAgICB1cGRhdGVE
aXNwbGF5KFtdKTsKKyAgLy8gTWFrZSBzdXJlIHRoZSBndXR0ZXJzIG9wdGlvbnMgY29udGFpbnMg
dGhlIGVsZW1lbnQKKyAgLy8gIkNvZGVNaXJyb3ItbGluZW51bWJlcnMiIHdoZW4gdGhlIGxpbmVO
dW1iZXJzIG9wdGlvbiBpcyB0cnVlLgorICBmdW5jdGlvbiBzZXRHdXR0ZXJzRm9yTGluZU51bWJl
cnMob3B0aW9ucykgeworICAgIHZhciBmb3VuZCA9IGZhbHNlOworICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgb3B0aW9ucy5ndXR0ZXJzLmxlbmd0aDsgKytpKSB7CisgICAgICBpZiAob3B0aW9ucy5n
dXR0ZXJzW2ldID09ICJDb2RlTWlycm9yLWxpbmVudW1iZXJzIikgeworICAgICAgICBpZiAob3B0
aW9ucy5saW5lTnVtYmVycykgZm91bmQgPSB0cnVlOworICAgICAgICBlbHNlIG9wdGlvbnMuZ3V0
dGVycy5zcGxpY2UoaS0tLCAxKTsKICAgICAgIH0KICAgICB9CisgICAgaWYgKCFmb3VuZCAmJiBv
cHRpb25zLmxpbmVOdW1iZXJzKQorICAgICAgb3B0aW9ucy5ndXR0ZXJzLnB1c2goIkNvZGVNaXJy
b3ItbGluZW51bWJlcnMiKTsKKyAgfQogCi0gICAgZnVuY3Rpb24gb25TY3JvbGxNYWluKGUpIHsK
LSAgICAgIGlmIChvcHRpb25zLmZpeGVkR3V0dGVyICYmIGd1dHRlci5zdHlsZS5sZWZ0ICE9IHNj
cm9sbGVyLnNjcm9sbExlZnQgKyAicHgiKQotICAgICAgICBndXR0ZXIuc3R5bGUubGVmdCA9IHNj
cm9sbGVyLnNjcm9sbExlZnQgKyAicHgiOwotICAgICAgaWYgKHNjcm9sbGVyLnNjcm9sbFRvcCAh
PSBsYXN0U2Nyb2xsVG9wKSB7Ci0gICAgICAgIGxhc3RTY3JvbGxUb3AgPSBzY3JvbGxlci5zY3Jv
bGxUb3A7Ci0gICAgICAgIGlmIChzY3JvbGxiYXIuc2Nyb2xsVG9wICE9IGxhc3RTY3JvbGxUb3Ap
Ci0gICAgICAgICAgc2Nyb2xsYmFyLnNjcm9sbFRvcCA9IGxhc3RTY3JvbGxUb3A7Ci0gICAgICAg
IHVwZGF0ZURpc3BsYXkoW10pOworICAvLyBTQ1JPTExCQVJTCisKKyAgLy8gUmUtc3luY2hyb25p
emUgdGhlIGZha2Ugc2Nyb2xsYmFycyB3aXRoIHRoZSBhY3R1YWwgc2l6ZSBvZiB0aGUKKyAgLy8g
Y29udGVudC4gT3B0aW9uYWxseSBmb3JjZSBhIHNjcm9sbFRvcC4KKyAgZnVuY3Rpb24gdXBkYXRl
U2Nyb2xsYmFycyhkIC8qIGRpc3BsYXkgKi8sIGRvY0hlaWdodCwgc2Nyb2xsVG9wKSB7CisgICAg
ZC5zaXplci5zdHlsZS5taW5IZWlnaHQgPSBkLmhlaWdodEZvcmNlci5zdHlsZS50b3AgPSAoZG9j
SGVpZ2h0ICsgMiAqIHBhZGRpbmdUb3AoZCkpICsgInB4IjsKKyAgICB2YXIgbmVlZHNIID0gZC5z
Y3JvbGxlci5zY3JvbGxXaWR0aCA+IGQuc2Nyb2xsZXIuY2xpZW50V2lkdGg7CisgICAgdmFyIG5l
ZWRzViA9IGQuc2Nyb2xsZXIuc2Nyb2xsSGVpZ2h0ID4gZC5zY3JvbGxlci5jbGllbnRIZWlnaHQ7
CisgICAgaWYgKG5lZWRzVikgeworICAgICAgZC5zY3JvbGxiYXJWLnN0eWxlLmRpc3BsYXkgPSAi
YmxvY2siOworICAgICAgZC5zY3JvbGxiYXJWLnN0eWxlLmJvdHRvbSA9IG5lZWRzSCA/IHNjcm9s
bGJhcldpZHRoKGQubWVhc3VyZSkgKyAicHgiIDogIjAiOworICAgICAgZC5zY3JvbGxiYXJWLmZp
cnN0Q2hpbGQuc3R5bGUuaGVpZ2h0ID0gCisgICAgICAgIChkLnNjcm9sbGVyLnNjcm9sbEhlaWdo
dCAtIGQuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0ICsgZC5zY3JvbGxiYXJWLmNsaWVudEhlaWdodCkg
KyAicHgiOworICAgICAgaWYgKHNjcm9sbFRvcCAhPSBudWxsKSB7CisgICAgICAgIGQuc2Nyb2xs
YmFyVi5zY3JvbGxUb3AgPSBkLnNjcm9sbGVyLnNjcm9sbFRvcCA9IHNjcm9sbFRvcDsKKyAgICAg
ICAgLy8gJ051ZGdlJyB0aGUgc2Nyb2xsYmFyIHRvIHdvcmsgYXJvdW5kIGEgV2Via2l0IGJ1ZyB3
aGVyZSwKKyAgICAgICAgLy8gaW4gc29tZSBzaXR1YXRpb25zLCB3ZSdkIGVuZCB1cCB3aXRoIGEg
c2Nyb2xsYmFyIHRoYXQKKyAgICAgICAgLy8gcmVwb3J0ZWQgaXRzIHNjcm9sbFRvcCAoYW5kIGxv
b2tlZCkgYXMgZXhwZWN0ZWQsIGJ1dAorICAgICAgICAvLyAqYmVoYXZlZCogYXMgaWYgaXQgd2Fz
IHN0aWxsIGluIGEgcHJldmlvdXMgc3RhdGUgKGkuZS4KKyAgICAgICAgLy8gY291bGRuJ3Qgc2Ny
b2xsIHVwLCBldmVuIHRob3VnaCBpdCBhcHBlYXJlZCB0byBiZSBhdCB0aGUKKyAgICAgICAgLy8g
Ym90dG9tKS4KKyAgICAgICAgaWYgKHdlYmtpdCkgc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAg
ICAgICAgICBpZiAoZC5zY3JvbGxiYXJWLnNjcm9sbFRvcCAhPSBzY3JvbGxUb3ApIHJldHVybjsK
KyAgICAgICAgICBkLnNjcm9sbGJhclYuc2Nyb2xsVG9wID0gc2Nyb2xsVG9wICsgKHNjcm9sbFRv
cCA/IC0xIDogMSk7CisgICAgICAgICAgZC5zY3JvbGxiYXJWLnNjcm9sbFRvcCA9IHNjcm9sbFRv
cDsKKyAgICAgICAgfSwgMCk7CiAgICAgICB9Ci0gICAgICBpZiAob3B0aW9ucy5vblNjcm9sbCkg
b3B0aW9ucy5vblNjcm9sbChpbnN0YW5jZSk7CisgICAgfSBlbHNlIGQuc2Nyb2xsYmFyVi5zdHls
ZS5kaXNwbGF5ID0gIiI7CisgICAgaWYgKG5lZWRzSCkgeworICAgICAgZC5zY3JvbGxiYXJILnN0
eWxlLmRpc3BsYXkgPSAiYmxvY2siOworICAgICAgZC5zY3JvbGxiYXJILnN0eWxlLnJpZ2h0ID0g
bmVlZHNWID8gc2Nyb2xsYmFyV2lkdGgoZC5tZWFzdXJlKSArICJweCIgOiAiMCI7CisgICAgICBk
LnNjcm9sbGJhckguZmlyc3RDaGlsZC5zdHlsZS53aWR0aCA9CisgICAgICAgIChkLnNjcm9sbGVy
LnNjcm9sbFdpZHRoIC0gZC5zY3JvbGxlci5jbGllbnRXaWR0aCArIGQuc2Nyb2xsYmFySC5jbGll
bnRXaWR0aCkgKyAicHgiOworICAgIH0gZWxzZSBkLnNjcm9sbGJhckguc3R5bGUuZGlzcGxheSA9
ICIiOworICAgIGlmIChuZWVkc0ggJiYgbmVlZHNWKSB7CisgICAgICBkLnNjcm9sbGJhckZpbGxl
ci5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKKyAgICAgIGQuc2Nyb2xsYmFyRmlsbGVyLnN0eWxl
LmhlaWdodCA9IGQuc2Nyb2xsYmFyRmlsbGVyLnN0eWxlLndpZHRoID0gc2Nyb2xsYmFyV2lkdGgo
ZC5tZWFzdXJlKSArICJweCI7CisgICAgfSBlbHNlIGQuc2Nyb2xsYmFyRmlsbGVyLnN0eWxlLmRp
c3BsYXkgPSAiIjsKKworICAgIGlmIChtYWNfZ2VMaW9uICYmIHNjcm9sbGJhcldpZHRoKGQubWVh
c3VyZSkgPT09IDApCisgICAgICBkLnNjcm9sbGJhclYuc3R5bGUubWluV2lkdGggPSBkLnNjcm9s
bGJhckguc3R5bGUubWluSGVpZ2h0ID0gbWFjX2dlTW91bnRhaW5MaW9uID8gIjE4cHgiIDogIjEy
cHgiOworICB9CisKKyAgZnVuY3Rpb24gdmlzaWJsZUxpbmVzKGRpc3BsYXksIGRvYywgdmlld1Bv
cnQpIHsKKyAgICB2YXIgdG9wID0gZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3AsIGhlaWdodCA9
IGRpc3BsYXkud3JhcHBlci5jbGllbnRIZWlnaHQ7CisgICAgaWYgKHR5cGVvZiB2aWV3UG9ydCA9
PSAibnVtYmVyIikgdG9wID0gdmlld1BvcnQ7CisgICAgZWxzZSBpZiAodmlld1BvcnQpIHt0b3Ag
PSB2aWV3UG9ydC50b3A7IGhlaWdodCA9IHZpZXdQb3J0LmJvdHRvbSAtIHZpZXdQb3J0LnRvcDt9
CisgICAgdG9wID0gTWF0aC5mbG9vcih0b3AgLSBwYWRkaW5nVG9wKGRpc3BsYXkpKTsKKyAgICB2
YXIgYm90dG9tID0gTWF0aC5jZWlsKHRvcCArIGhlaWdodCk7CisgICAgcmV0dXJuIHtmcm9tOiBs
aW5lQXRIZWlnaHQoZG9jLCB0b3ApLCB0bzogbGluZUF0SGVpZ2h0KGRvYywgYm90dG9tKX07Cisg
IH0KKworICAvLyBMSU5FIE5VTUJFUlMKKworICBmdW5jdGlvbiBhbGlnblZlcnRpY2FsbHkoZGlz
cGxheSkgeworICAgIGlmICghZGlzcGxheS5hbGlnbldpZGdldHMgJiYgIWRpc3BsYXkuZ3V0dGVy
cy5maXJzdENoaWxkKSByZXR1cm47CisgICAgdmFyIGwgPSBjb21wZW5zYXRlRm9ySFNjcm9sbChk
aXNwbGF5KSArICJweCI7CisgICAgZm9yICh2YXIgbiA9IGRpc3BsYXkubGluZURpdi5maXJzdENo
aWxkOyBuOyBuID0gbi5uZXh0U2libGluZykgaWYgKG4uYWxpZ25hYmxlKSB7CisgICAgICBmb3Ig
KHZhciBpID0gMCwgYSA9IG4uYWxpZ25hYmxlOyBpIDwgYS5sZW5ndGg7ICsraSkgYVtpXS5zdHls
ZS5sZWZ0ID0gbDsKICAgICB9CisgIH0KIAotICAgIGZ1bmN0aW9uIG9uTW91c2VEb3duKGUpIHsK
LSAgICAgIHNldFNoaWZ0KGVfcHJvcChlLCAic2hpZnRLZXkiKSk7Ci0gICAgICAvLyBDaGVjayB3
aGV0aGVyIHRoaXMgaXMgYSBjbGljayBpbiBhIHdpZGdldAotICAgICAgZm9yICh2YXIgbiA9IGVf
dGFyZ2V0KGUpOyBuICE9IHdyYXBwZXI7IG4gPSBuLnBhcmVudE5vZGUpCi0gICAgICAgIGlmIChu
LnBhcmVudE5vZGUgPT0gc2l6ZXIgJiYgbiAhPSBtb3ZlcikgcmV0dXJuOworICBmdW5jdGlvbiBt
YXliZVVwZGF0ZUxpbmVOdW1iZXJXaWR0aChjbSkgeworICAgIGlmICghY20ub3B0aW9ucy5saW5l
TnVtYmVycykgcmV0dXJuIGZhbHNlOworICAgIHZhciBkb2MgPSBjbS52aWV3LmRvYywgbGFzdCA9
IGxpbmVOdW1iZXJGb3IoY20ub3B0aW9ucywgZG9jLnNpemUgLSAxKSwgZGlzcGxheSA9IGNtLmRp
c3BsYXk7CisgICAgaWYgKGxhc3QubGVuZ3RoICE9IGRpc3BsYXkubGluZU51bUNoYXJzKSB7Cisg
ICAgICB2YXIgdGVzdCA9IGRpc3BsYXkubWVhc3VyZS5hcHBlbmRDaGlsZChlbHQoImRpdiIsIFtl
bHQoImRpdiIsIGxhc3QpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiQ29kZU1pcnJvci1saW5lbnVtYmVyIENvZGVNaXJyb3ItZ3V0dGVyLWVsdCIp
KTsKKyAgICAgIHZhciBpbm5lclcgPSB0ZXN0LmZpcnN0Q2hpbGQub2Zmc2V0V2lkdGgsIHBhZGRp
bmcgPSB0ZXN0Lm9mZnNldFdpZHRoIC0gaW5uZXJXOworICAgICAgZGlzcGxheS5saW5lR3V0dGVy
LnN0eWxlLndpZHRoID0gIiI7CisgICAgICBkaXNwbGF5LmxpbmVOdW1Jbm5lcldpZHRoID0gTWF0
aC5tYXgoaW5uZXJXLCBkaXNwbGF5LmxpbmVHdXR0ZXIub2Zmc2V0V2lkdGggLSBwYWRkaW5nKTsK
KyAgICAgIGRpc3BsYXkubGluZU51bVdpZHRoID0gZGlzcGxheS5saW5lTnVtSW5uZXJXaWR0aCAr
IHBhZGRpbmc7CisgICAgICBkaXNwbGF5LmxpbmVOdW1DaGFycyA9IGRpc3BsYXkubGluZU51bUlu
bmVyV2lkdGggPyBsYXN0Lmxlbmd0aCA6IC0xOworICAgICAgZGlzcGxheS5saW5lR3V0dGVyLnN0
eWxlLndpZHRoID0gZGlzcGxheS5saW5lTnVtV2lkdGggKyAicHgiOworICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKKyAgfQogCi0gICAgICAvLyBTZWUgaWYgdGhp
cyBpcyBhIGNsaWNrIGluIHRoZSBndXR0ZXIKLSAgICAgIGZvciAodmFyIG4gPSBlX3RhcmdldChl
KTsgbiAhPSB3cmFwcGVyOyBuID0gbi5wYXJlbnROb2RlKQotICAgICAgICBpZiAobi5wYXJlbnRO
b2RlID09IGd1dHRlclRleHQpIHsKLSAgICAgICAgICBpZiAob3B0aW9ucy5vbkd1dHRlckNsaWNr
KQotICAgICAgICAgICAgb3B0aW9ucy5vbkd1dHRlckNsaWNrKGluc3RhbmNlLCBpbmRleE9mKGd1
dHRlclRleHQuY2hpbGROb2RlcywgbikgKyBzaG93aW5nRnJvbSwgZSk7Ci0gICAgICAgICAgcmV0
dXJuIGVfcHJldmVudERlZmF1bHQoZSk7Ci0gICAgICAgIH0KKyAgZnVuY3Rpb24gbGluZU51bWJl
ckZvcihvcHRpb25zLCBpKSB7CisgICAgcmV0dXJuIFN0cmluZyhvcHRpb25zLmxpbmVOdW1iZXJG
b3JtYXR0ZXIoaSArIG9wdGlvbnMuZmlyc3RMaW5lTnVtYmVyKSk7CisgIH0KKyAgZnVuY3Rpb24g
Y29tcGVuc2F0ZUZvckhTY3JvbGwoZGlzcGxheSkgeworICAgIHJldHVybiBkaXNwbGF5LnNjcm9s
bGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgLSBkaXNwbGF5LnNpemVyLmdldEJvdW5k
aW5nQ2xpZW50UmVjdCgpLmxlZnQ7CisgIH0KIAotICAgICAgdmFyIHN0YXJ0ID0gcG9zRnJvbU1v
dXNlKGUpOworICAvLyBESVNQTEFZIERSQVdJTkcKIAotICAgICAgc3dpdGNoIChlX2J1dHRvbihl
KSkgewotICAgICAgY2FzZSAzOgotICAgICAgICBpZiAoZ2Vja28pIG9uQ29udGV4dE1lbnUoZSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgMjoKLSAgICAgICAgaWYgKHN0YXJ0KSBzZXRD
dXJzb3Ioc3RhcnQubGluZSwgc3RhcnQuY2gsIHRydWUpOwotICAgICAgICBzZXRUaW1lb3V0KGZv
Y3VzSW5wdXQsIDIwKTsKLSAgICAgICAgZV9wcmV2ZW50RGVmYXVsdChlKTsKLSAgICAgICAgcmV0
dXJuOwotICAgICAgfQotICAgICAgLy8gRm9yIGJ1dHRvbiAxLCBpZiBpdCB3YXMgY2xpY2tlZCBp
bnNpZGUgdGhlIGVkaXRvcgotICAgICAgLy8gKHBvc0Zyb21Nb3VzZSByZXR1cm5pbmcgbm9uLW51
bGwpLCB3ZSBoYXZlIHRvIGFkanVzdCB0aGUKLSAgICAgIC8vIHNlbGVjdGlvbi4KLSAgICAgIGlm
ICghc3RhcnQpIHtpZiAoZV90YXJnZXQoZSkgPT0gc2Nyb2xsZXIpIGVfcHJldmVudERlZmF1bHQo
ZSk7IHJldHVybjt9Ci0KLSAgICAgIGlmICghZm9jdXNlZCkgb25Gb2N1cygpOwotCi0gICAgICB2
YXIgbm93ID0gK25ldyBEYXRlLCB0eXBlID0gInNpbmdsZSI7Ci0gICAgICBpZiAobGFzdERvdWJs
ZUNsaWNrICYmIGxhc3REb3VibGVDbGljay50aW1lID4gbm93IC0gNDAwICYmIHBvc0VxKGxhc3RE
b3VibGVDbGljay5wb3MsIHN0YXJ0KSkgewotICAgICAgICB0eXBlID0gInRyaXBsZSI7Ci0gICAg
ICAgIGVfcHJldmVudERlZmF1bHQoZSk7Ci0gICAgICAgIHNldFRpbWVvdXQoZm9jdXNJbnB1dCwg
MjApOwotICAgICAgICBzZWxlY3RMaW5lKHN0YXJ0LmxpbmUpOwotICAgICAgfSBlbHNlIGlmIChs
YXN0Q2xpY2sgJiYgbGFzdENsaWNrLnRpbWUgPiBub3cgLSA0MDAgJiYgcG9zRXEobGFzdENsaWNr
LnBvcywgc3RhcnQpKSB7Ci0gICAgICAgIHR5cGUgPSAiZG91YmxlIjsKLSAgICAgICAgbGFzdERv
dWJsZUNsaWNrID0ge3RpbWU6IG5vdywgcG9zOiBzdGFydH07Ci0gICAgICAgIGVfcHJldmVudERl
ZmF1bHQoZSk7Ci0gICAgICAgIHZhciB3b3JkID0gZmluZFdvcmRBdChzdGFydCk7Ci0gICAgICAg
IHNldFNlbGVjdGlvblVzZXIod29yZC5mcm9tLCB3b3JkLnRvKTsKLSAgICAgIH0gZWxzZSB7IGxh
c3RDbGljayA9IHt0aW1lOiBub3csIHBvczogc3RhcnR9OyB9Ci0KLSAgICAgIGZ1bmN0aW9uIGRy
YWdFbmQoZTIpIHsKLSAgICAgICAgaWYgKHdlYmtpdCkgc2Nyb2xsZXIuZHJhZ2dhYmxlID0gZmFs
c2U7Ci0gICAgICAgIGRyYWdnaW5nVGV4dCA9IGZhbHNlOwotICAgICAgICB1cCgpOyBkcm9wKCk7
Ci0gICAgICAgIGlmIChNYXRoLmFicyhlLmNsaWVudFggLSBlMi5jbGllbnRYKSArIE1hdGguYWJz
KGUuY2xpZW50WSAtIGUyLmNsaWVudFkpIDwgMTApIHsKLSAgICAgICAgICBlX3ByZXZlbnREZWZh
dWx0KGUyKTsKLSAgICAgICAgICBzZXRDdXJzb3Ioc3RhcnQubGluZSwgc3RhcnQuY2gsIHRydWUp
OwotICAgICAgICAgIGZvY3VzSW5wdXQoKTsKKyAgZnVuY3Rpb24gdXBkYXRlRGlzcGxheShjbSwg
Y2hhbmdlcywgdmlld1BvcnQpIHsKKyAgICB2YXIgb2xkRnJvbSA9IGNtLmRpc3BsYXkuc2hvd2lu
Z0Zyb20sIG9sZFRvID0gY20uZGlzcGxheS5zaG93aW5nVG87CisgICAgdmFyIHVwZGF0ZWQgPSB1
cGRhdGVEaXNwbGF5SW5uZXIoY20sIGNoYW5nZXMsIHZpZXdQb3J0KTsKKyAgICBpZiAodXBkYXRl
ZCkgeworICAgICAgc2lnbmFsTGF0ZXIoY20sIGNtLCAidXBkYXRlIiwgY20pOworICAgICAgaWYg
KGNtLmRpc3BsYXkuc2hvd2luZ0Zyb20gIT0gb2xkRnJvbSB8fCBjbS5kaXNwbGF5LnNob3dpbmdU
byAhPSBvbGRUbykKKyAgICAgICAgc2lnbmFsTGF0ZXIoY20sIGNtLCAidmlld3BvcnRDaGFuZ2Ui
LCBjbSwgY20uZGlzcGxheS5zaG93aW5nRnJvbSwgY20uZGlzcGxheS5zaG93aW5nVG8pOworICAg
IH0KKyAgICB1cGRhdGVTZWxlY3Rpb24oY20pOworICAgIHVwZGF0ZVNjcm9sbGJhcnMoY20uZGlz
cGxheSwgY20udmlldy5kb2MuaGVpZ2h0LCB0eXBlb2Ygdmlld1BvcnQgPT0gIm51bWJlciIgPyB2
aWV3UG9ydCA6IG51bGwpOworICAgIHJldHVybiB1cGRhdGVkOworICB9CisKKyAgLy8gVXNlcyBh
IHNldCBvZiBjaGFuZ2VzIHBsdXMgdGhlIGN1cnJlbnQgc2Nyb2xsIHBvc2l0aW9uIHRvCisgIC8v
IGRldGVybWluZSB3aGljaCBET00gdXBkYXRlcyBoYXZlIHRvIGJlIG1hZGUsIGFuZCBtYWtlcyB0
aGUKKyAgLy8gdXBkYXRlcy4KKyAgZnVuY3Rpb24gdXBkYXRlRGlzcGxheUlubmVyKGNtLCBjaGFu
Z2VzLCB2aWV3UG9ydCkgeworICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheSwgZG9jID0gY20u
dmlldy5kb2M7CisgICAgaWYgKCFkaXNwbGF5LndyYXBwZXIuY2xpZW50V2lkdGgpIHsKKyAgICAg
IGRpc3BsYXkuc2hvd2luZ0Zyb20gPSBkaXNwbGF5LnNob3dpbmdUbyA9IGRpc3BsYXkudmlld09m
ZnNldCA9IDA7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gQ29tcHV0ZSB0aGUgbmV3
IHZpc2libGUgd2luZG93CisgICAgLy8gSWYgc2Nyb2xsVG9wIGlzIHNwZWNpZmllZCwgdXNlIHRo
YXQgdG8gZGV0ZXJtaW5lIHdoaWNoIGxpbmVzCisgICAgLy8gdG8gcmVuZGVyIGluc3RlYWQgb2Yg
dGhlIGN1cnJlbnQgc2Nyb2xsYmFyIHBvc2l0aW9uLgorICAgIHZhciB2aXNpYmxlID0gdmlzaWJs
ZUxpbmVzKGRpc3BsYXksIGRvYywgdmlld1BvcnQpOworICAgIC8vIEJhaWwgb3V0IGlmIHRoZSB2
aXNpYmxlIGFyZWEgaXMgYWxyZWFkeSByZW5kZXJlZCBhbmQgbm90aGluZyBjaGFuZ2VkLgorICAg
IGlmIChjaGFuZ2VzICE9PSB0cnVlICYmIGNoYW5nZXMubGVuZ3RoID09IDAgJiYKKyAgICAgICAg
dmlzaWJsZS5mcm9tID4gZGlzcGxheS5zaG93aW5nRnJvbSAmJiB2aXNpYmxlLnRvIDwgZGlzcGxh
eS5zaG93aW5nVG8pCisgICAgICByZXR1cm47CisKKyAgICBpZiAoY2hhbmdlcyAmJiBtYXliZVVw
ZGF0ZUxpbmVOdW1iZXJXaWR0aChjbSkpCisgICAgICBjaGFuZ2VzID0gdHJ1ZTsKKyAgICBkaXNw
bGF5LnNpemVyLnN0eWxlLm1hcmdpbkxlZnQgPSBkaXNwbGF5LnNjcm9sbGJhckguc3R5bGUubGVm
dCA9IGRpc3BsYXkuZ3V0dGVycy5vZmZzZXRXaWR0aCArICJweCI7CisKKyAgICAvLyBXaGVuIG1l
cmdlZCBsaW5lcyBhcmUgcHJlc2VudCwgdGhlIGxpbmUgdGhhdCBuZWVkcyB0byBiZQorICAgIC8v
IHJlZHJhd24gbWlnaHQgbm90IGJlIHRoZSBvbmUgdGhhdCB3YXMgY2hhbmdlZC4KKyAgICBpZiAo
Y2hhbmdlcyAhPT0gdHJ1ZSAmJiBzYXdDb2xsYXBzZWRTcGFucykKKyAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgY2hhbmdlcy5sZW5ndGg7ICsraSkgeworICAgICAgICB2YXIgY2ggPSBjaGFuZ2Vz
W2ldLCBtZXJnZWQ7CisgICAgICAgIHdoaWxlIChtZXJnZWQgPSBjb2xsYXBzZWRTcGFuQXRTdGFy
dChnZXRMaW5lKGRvYywgY2guZnJvbSkpKSB7CisgICAgICAgICAgdmFyIGZyb20gPSBtZXJnZWQu
ZmluZCgpLmZyb20ubGluZTsKKyAgICAgICAgICBpZiAoY2guZGlmZikgY2guZGlmZiAtPSBjaC5m
cm9tIC0gZnJvbTsKKyAgICAgICAgICBjaC5mcm9tID0gZnJvbTsKICAgICAgICAgfQogICAgICAg
fQotICAgICAgdmFyIGxhc3QgPSBzdGFydCwgZ29pbmc7Ci0gICAgICBpZiAob3B0aW9ucy5kcmFn
RHJvcCAmJiBkcmFnQW5kRHJvcCAmJiAhb3B0aW9ucy5yZWFkT25seSAmJiAhcG9zRXEoc2VsLmZy
b20sIHNlbC50bykgJiYKLSAgICAgICAgICAhcG9zTGVzcyhzdGFydCwgc2VsLmZyb20pICYmICFw
b3NMZXNzKHNlbC50bywgc3RhcnQpICYmIHR5cGUgPT0gInNpbmdsZSIpIHsKLSAgICAgICAgLy8g
TGV0IHRoZSBkcmFnIGhhbmRsZXIgaGFuZGxlIHRoaXMuCi0gICAgICAgIGlmICh3ZWJraXQpIHNj
cm9sbGVyLmRyYWdnYWJsZSA9IHRydWU7Ci0gICAgICAgIHZhciB1cCA9IGNvbm5lY3QoZG9jdW1l
bnQsICJtb3VzZXVwIiwgb3BlcmF0aW9uKGRyYWdFbmQpLCB0cnVlKTsKLSAgICAgICAgdmFyIGRy
b3AgPSBjb25uZWN0KHNjcm9sbGVyLCAiZHJvcCIsIG9wZXJhdGlvbihkcmFnRW5kKSwgdHJ1ZSk7
Ci0gICAgICAgIGRyYWdnaW5nVGV4dCA9IHRydWU7Ci0gICAgICAgIC8vIElFJ3MgYXBwcm9hY2gg
dG8gZHJhZ2dhYmxlCi0gICAgICAgIGlmIChzY3JvbGxlci5kcmFnRHJvcCkgc2Nyb2xsZXIuZHJh
Z0Ryb3AoKTsKLSAgICAgICAgcmV0dXJuOworCisgICAgLy8gVXNlZCB0byBkZXRlcm1pbmUgd2hp
Y2ggbGluZXMgbmVlZCB0aGVpciBsaW5lIG51bWJlcnMgdXBkYXRlZAorICAgIHZhciBwb3NpdGlv
bnNDaGFuZ2VkRnJvbSA9IGNoYW5nZXMgPT09IHRydWUgPyAwIDogSW5maW5pdHk7CisgICAgaWYg
KGNtLm9wdGlvbnMubGluZU51bWJlcnMgJiYgY2hhbmdlcyAmJiBjaGFuZ2VzICE9PSB0cnVlKQor
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFuZ2VzLmxlbmd0aDsgKytpKQorICAgICAgICBp
ZiAoY2hhbmdlc1tpXS5kaWZmKSB7IHBvc2l0aW9uc0NoYW5nZWRGcm9tID0gY2hhbmdlc1tpXS5m
cm9tOyBicmVhazsgfQorCisgICAgdmFyIGZyb20gPSBNYXRoLm1heCh2aXNpYmxlLmZyb20gLSBj
bS5vcHRpb25zLnZpZXdwb3J0TWFyZ2luLCAwKTsKKyAgICB2YXIgdG8gPSBNYXRoLm1pbihkb2Mu
c2l6ZSwgdmlzaWJsZS50byArIGNtLm9wdGlvbnMudmlld3BvcnRNYXJnaW4pOworICAgIGlmIChk
aXNwbGF5LnNob3dpbmdGcm9tIDwgZnJvbSAmJiBmcm9tIC0gZGlzcGxheS5zaG93aW5nRnJvbSA8
IDIwKSBmcm9tID0gZGlzcGxheS5zaG93aW5nRnJvbTsKKyAgICBpZiAoZGlzcGxheS5zaG93aW5n
VG8gPiB0byAmJiBkaXNwbGF5LnNob3dpbmdUbyAtIHRvIDwgMjApIHRvID0gTWF0aC5taW4oZG9j
LnNpemUsIGRpc3BsYXkuc2hvd2luZ1RvKTsKKworICAgIC8vIENyZWF0ZSBhIHJhbmdlIG9mIHRo
ZW9yZXRpY2FsbHkgaW50YWN0IGxpbmVzLCBhbmQgcHVuY2ggaG9sZXMKKyAgICAvLyBpbiB0aGF0
IHVzaW5nIHRoZSBjaGFuZ2UgaW5mby4KKyAgICB2YXIgaW50YWN0ID0gY2hhbmdlcyA9PT0gdHJ1
ZSA/IFtdIDoKKyAgICAgIGNvbXB1dGVJbnRhY3QoW3tmcm9tOiBkaXNwbGF5LnNob3dpbmdGcm9t
LCB0bzogZGlzcGxheS5zaG93aW5nVG8sIGRvbVN0YXJ0OiAwfV0sIGNoYW5nZXMpOworICAgIC8v
IENsaXAgb2ZmIHRoZSBwYXJ0cyB0aGF0IHdvbid0IGJlIHZpc2libGUKKyAgICB2YXIgaW50YWN0
TGluZXMgPSAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW50YWN0Lmxlbmd0aDsgKytpKSB7
CisgICAgICB2YXIgcmFuZ2UgPSBpbnRhY3RbaV07CisgICAgICBpZiAocmFuZ2UuZnJvbSA8IGZy
b20pIHtyYW5nZS5kb21TdGFydCArPSAoZnJvbSAtIHJhbmdlLmZyb20pOyByYW5nZS5mcm9tID0g
ZnJvbTt9CisgICAgICBpZiAocmFuZ2UudG8gPiB0bykgcmFuZ2UudG8gPSB0bzsKKyAgICAgIGlm
IChyYW5nZS5mcm9tID49IHJhbmdlLnRvKSBpbnRhY3Quc3BsaWNlKGktLSwgMSk7CisgICAgICBl
bHNlIGludGFjdExpbmVzICs9IHJhbmdlLnRvIC0gcmFuZ2UuZnJvbTsKKyAgICB9CisgICAgaWYg
KGludGFjdExpbmVzID09IHRvIC0gZnJvbSAmJiBmcm9tID09IGRpc3BsYXkuc2hvd2luZ0Zyb20g
JiYgdG8gPT0gZGlzcGxheS5zaG93aW5nVG8pCisgICAgICByZXR1cm47CisgICAgaW50YWN0LnNv
cnQoZnVuY3Rpb24oYSwgYikge3JldHVybiBhLmRvbVN0YXJ0IC0gYi5kb21TdGFydDt9KTsKKwor
ICAgIGlmIChpbnRhY3RMaW5lcyA8ICh0byAtIGZyb20pICogLjcpIGRpc3BsYXkubGluZURpdi5z
dHlsZS5kaXNwbGF5ID0gIm5vbmUiOworICAgIHBhdGNoRGlzcGxheShjbSwgZnJvbSwgdG8sIGlu
dGFjdCwgcG9zaXRpb25zQ2hhbmdlZEZyb20pOworICAgIGRpc3BsYXkubGluZURpdi5zdHlsZS5k
aXNwbGF5ID0gIiI7CisKKyAgICB2YXIgZGlmZmVyZW50ID0gZnJvbSAhPSBkaXNwbGF5LnNob3dp
bmdGcm9tIHx8IHRvICE9IGRpc3BsYXkuc2hvd2luZ1RvIHx8CisgICAgICBkaXNwbGF5Lmxhc3RT
aXplQyAhPSBkaXNwbGF5LndyYXBwZXIuY2xpZW50SGVpZ2h0OworICAgIC8vIFRoaXMgaXMganVz
dCBhIGJvZ3VzIGZvcm11bGEgdGhhdCBkZXRlY3RzIHdoZW4gdGhlIGVkaXRvciBpcworICAgIC8v
IHJlc2l6ZWQgb3IgdGhlIGZvbnQgc2l6ZSBjaGFuZ2VzLgorICAgIGlmIChkaWZmZXJlbnQpIGRp
c3BsYXkubGFzdFNpemVDID0gZGlzcGxheS53cmFwcGVyLmNsaWVudEhlaWdodDsKKyAgICBkaXNw
bGF5LnNob3dpbmdGcm9tID0gZnJvbTsgZGlzcGxheS5zaG93aW5nVG8gPSB0bzsKKyAgICBkaXNw
bGF5LnZpZXdPZmZzZXQgPSBoZWlnaHRBdExpbmUoY20sIGdldExpbmUoZG9jLCBmcm9tKSk7Cisg
ICAgc3RhcnRXb3JrZXIoY20sIDEwMCk7CisKKyAgICAvLyBTaW5jZSB0aGlzIGlzIGFsbCByYXRo
ZXIgZXJyb3IgcHJvbmUsIGl0IGlzIGhvbm91cmVkIHdpdGggdGhlCisgICAgLy8gb25seSBhc3Nl
cnRpb24gaW4gdGhlIHdob2xlIGZpbGUuCisgICAgaWYgKGRpc3BsYXkubGluZURpdi5jaGlsZE5v
ZGVzLmxlbmd0aCAhPSBkaXNwbGF5LnNob3dpbmdUbyAtIGRpc3BsYXkuc2hvd2luZ0Zyb20pCisg
ICAgICB0aHJvdyBuZXcgRXJyb3IoIkJBRCBQQVRDSCEgIiArIEpTT04uc3RyaW5naWZ5KGludGFj
dCkgKyAiIHNpemU9IiArIChkaXNwbGF5LnNob3dpbmdUbyAtIGRpc3BsYXkuc2hvd2luZ0Zyb20p
ICsKKyAgICAgICAgICAgICAgICAgICAgICAiIG5vZGVzPSIgKyBkaXNwbGF5LmxpbmVEaXYuY2hp
bGROb2Rlcy5sZW5ndGgpOworCisgICAgLy8gVXBkYXRlIGxpbmUgaGVpZ2h0cyBmb3IgdmlzaWJs
ZSBsaW5lcyBiYXNlZCBvbiBhY3R1YWwgRE9NCisgICAgLy8gc2l6ZXMKKyAgICB2YXIgY3VyTm9k
ZSA9IGRpc3BsYXkubGluZURpdi5maXJzdENoaWxkLCByZWxhdGl2ZVRvID0gY3VyTm9kZS5vZmZz
ZXRUb3A7CisgICAgZG9jLml0ZXIoZGlzcGxheS5zaG93aW5nRnJvbSwgZGlzcGxheS5zaG93aW5n
VG8sIGZ1bmN0aW9uKGxpbmUpIHsKKyAgICAgIC8vIFdvcmsgYXJvdW5kIGJpemFycm8gSUU3IGJ1
ZyB3aGVyZSwgc29tZXRpbWVzLCBvdXIgY3VyTm9kZQorICAgICAgLy8gaXMgbWFnaWNhbGx5IHJl
cGxhY2VkIHdpdGggYSBuZXcgbm9kZSBpbiB0aGUgRE9NLCBsZWF2aW5nCisgICAgICAvLyB1cyB3
aXRoIGEgcmVmZXJlbmNlIHRvIGFuIG9ycGhhbiAobmV4dFNpYmxpbmctbGVzcykgbm9kZS4KKyAg
ICAgIGlmICghY3VyTm9kZSkgcmV0dXJuOworICAgICAgaWYgKCFsaW5lSXNIaWRkZW4obGluZSkp
IHsKKyAgICAgICAgdmFyIGVuZCA9IGN1ck5vZGUub2Zmc2V0SGVpZ2h0ICsgY3VyTm9kZS5vZmZz
ZXRUb3A7CisgICAgICAgIHZhciBoZWlnaHQgPSBlbmQgLSByZWxhdGl2ZVRvLCBkaWZmID0gbGlu
ZS5oZWlnaHQgLSBoZWlnaHQ7CisgICAgICAgIGlmIChoZWlnaHQgPCAyKSBoZWlnaHQgPSB0ZXh0
SGVpZ2h0KGRpc3BsYXkpOworICAgICAgICByZWxhdGl2ZVRvID0gZW5kOworICAgICAgICBpZiAo
ZGlmZiA+IC4wMDEgfHwgZGlmZiA8IC0uMDAxKQorICAgICAgICAgIHVwZGF0ZUxpbmVIZWlnaHQo
bGluZSwgaGVpZ2h0KTsKICAgICAgIH0KLSAgICAgIGVfcHJldmVudERlZmF1bHQoZSk7Ci0gICAg
ICBpZiAodHlwZSA9PSAic2luZ2xlIikgc2V0Q3Vyc29yKHN0YXJ0LmxpbmUsIHN0YXJ0LmNoLCB0
cnVlKTsKLQotICAgICAgdmFyIHN0YXJ0c3RhcnQgPSBzZWwuZnJvbSwgc3RhcnRlbmQgPSBzZWwu
dG87Ci0KLSAgICAgIGZ1bmN0aW9uIGRvU2VsZWN0KGN1cikgewotICAgICAgICBpZiAodHlwZSA9
PSAic2luZ2xlIikgewotICAgICAgICAgIHNldFNlbGVjdGlvblVzZXIoc3RhcnQsIGN1cik7Ci0g
ICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSAiZG91YmxlIikgewotICAgICAgICAgIHZhciB3b3Jk
ID0gZmluZFdvcmRBdChjdXIpOwotICAgICAgICAgIGlmIChwb3NMZXNzKGN1ciwgc3RhcnRzdGFy
dCkpIHNldFNlbGVjdGlvblVzZXIod29yZC5mcm9tLCBzdGFydGVuZCk7Ci0gICAgICAgICAgZWxz
ZSBzZXRTZWxlY3Rpb25Vc2VyKHN0YXJ0c3RhcnQsIHdvcmQudG8pOwotICAgICAgICB9IGVsc2Ug
aWYgKHR5cGUgPT0gInRyaXBsZSIpIHsKLSAgICAgICAgICBpZiAocG9zTGVzcyhjdXIsIHN0YXJ0
c3RhcnQpKSBzZXRTZWxlY3Rpb25Vc2VyKHN0YXJ0ZW5kLCBjbGlwUG9zKHtsaW5lOiBjdXIubGlu
ZSwgY2g6IDB9KSk7Ci0gICAgICAgICAgZWxzZSBzZXRTZWxlY3Rpb25Vc2VyKHN0YXJ0c3RhcnQs
IGNsaXBQb3Moe2xpbmU6IGN1ci5saW5lICsgMSwgY2g6IDB9KSk7CisgICAgICBjdXJOb2RlID0g
Y3VyTm9kZS5uZXh0U2libGluZzsKKyAgICB9KTsKKworICAgIC8vIFBvc2l0aW9uIHRoZSBtb3Zl
ciBkaXYgdG8gYWxpZ24gd2l0aCB0aGUgY3VycmVudCB2aXJ0dWFsIHNjcm9sbCBwb3NpdGlvbgor
ICAgIGRpc3BsYXkubW92ZXIuc3R5bGUudG9wID0gZGlzcGxheS52aWV3T2Zmc2V0ICsgInB4IjsK
KyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorCisgIGZ1bmN0aW9uIGNvbXB1dGVJbnRhY3QoaW50YWN0
LCBjaGFuZ2VzKSB7CisgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBjaGFuZ2VzLmxlbmd0aCB8fCAw
OyBpIDwgbDsgKytpKSB7CisgICAgICB2YXIgY2hhbmdlID0gY2hhbmdlc1tpXSwgaW50YWN0MiA9
IFtdLCBkaWZmID0gY2hhbmdlLmRpZmYgfHwgMDsKKyAgICAgIGZvciAodmFyIGogPSAwLCBsMiA9
IGludGFjdC5sZW5ndGg7IGogPCBsMjsgKytqKSB7CisgICAgICAgIHZhciByYW5nZSA9IGludGFj
dFtqXTsKKyAgICAgICAgaWYgKGNoYW5nZS50byA8PSByYW5nZS5mcm9tICYmIGNoYW5nZS5kaWZm
KQorICAgICAgICAgIGludGFjdDIucHVzaCh7ZnJvbTogcmFuZ2UuZnJvbSArIGRpZmYsIHRvOiBy
YW5nZS50byArIGRpZmYsCisgICAgICAgICAgICAgICAgICAgICAgICBkb21TdGFydDogcmFuZ2Uu
ZG9tU3RhcnR9KTsKKyAgICAgICAgZWxzZSBpZiAoY2hhbmdlLnRvIDw9IHJhbmdlLmZyb20gfHwg
Y2hhbmdlLmZyb20gPj0gcmFuZ2UudG8pCisgICAgICAgICAgaW50YWN0Mi5wdXNoKHJhbmdlKTsK
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgaWYgKGNoYW5nZS5mcm9tID4gcmFuZ2UuZnJvbSkK
KyAgICAgICAgICAgIGludGFjdDIucHVzaCh7ZnJvbTogcmFuZ2UuZnJvbSwgdG86IGNoYW5nZS5m
cm9tLCBkb21TdGFydDogcmFuZ2UuZG9tU3RhcnR9KTsKKyAgICAgICAgICBpZiAoY2hhbmdlLnRv
IDwgcmFuZ2UudG8pCisgICAgICAgICAgICBpbnRhY3QyLnB1c2goe2Zyb206IGNoYW5nZS50byAr
IGRpZmYsIHRvOiByYW5nZS50byArIGRpZmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRv
bVN0YXJ0OiByYW5nZS5kb21TdGFydCArIChjaGFuZ2UudG8gLSByYW5nZS5mcm9tKX0pOwogICAg
ICAgICB9CiAgICAgICB9CisgICAgICBpbnRhY3QgPSBpbnRhY3QyOworICAgIH0KKyAgICByZXR1
cm4gaW50YWN0OworICB9CiAKLSAgICAgIGZ1bmN0aW9uIGV4dGVuZChlKSB7Ci0gICAgICAgIHZh
ciBjdXIgPSBwb3NGcm9tTW91c2UoZSwgdHJ1ZSk7Ci0gICAgICAgIGlmIChjdXIgJiYgIXBvc0Vx
KGN1ciwgbGFzdCkpIHsKLSAgICAgICAgICBpZiAoIWZvY3VzZWQpIG9uRm9jdXMoKTsKLSAgICAg
ICAgICBsYXN0ID0gY3VyOwotICAgICAgICAgIGRvU2VsZWN0KGN1cik7Ci0gICAgICAgICAgdXBk
YXRlSW5wdXQgPSBmYWxzZTsKLSAgICAgICAgICB2YXIgdmlzaWJsZSA9IHZpc2libGVMaW5lcygp
OwotICAgICAgICAgIGlmIChjdXIubGluZSA+PSB2aXNpYmxlLnRvIHx8IGN1ci5saW5lIDwgdmlz
aWJsZS5mcm9tKQotICAgICAgICAgICAgZ29pbmcgPSBzZXRUaW1lb3V0KG9wZXJhdGlvbihmdW5j
dGlvbigpe2V4dGVuZChlKTt9KSwgMTUwKTsKKyAgZnVuY3Rpb24gZ2V0RGltZW5zaW9ucyhjbSkg
eworICAgIHZhciBkID0gY20uZGlzcGxheSwgbGVmdCA9IHt9LCB3aWR0aCA9IHt9OworICAgIGZv
ciAodmFyIG4gPSBkLmd1dHRlcnMuZmlyc3RDaGlsZCwgaSA9IDA7IG47IG4gPSBuLm5leHRTaWJs
aW5nLCArK2kpIHsKKyAgICAgIGxlZnRbY20ub3B0aW9ucy5ndXR0ZXJzW2ldXSA9IG4ub2Zmc2V0
TGVmdDsKKyAgICAgIHdpZHRoW2NtLm9wdGlvbnMuZ3V0dGVyc1tpXV0gPSBuLm9mZnNldFdpZHRo
OworICAgIH0KKyAgICByZXR1cm4ge2ZpeGVkUG9zOiBjb21wZW5zYXRlRm9ySFNjcm9sbChkKSwK
KyAgICAgICAgICAgIGd1dHRlclRvdGFsV2lkdGg6IGQuZ3V0dGVycy5vZmZzZXRXaWR0aCwKKyAg
ICAgICAgICAgIGd1dHRlckxlZnQ6IGxlZnQsCisgICAgICAgICAgICBndXR0ZXJXaWR0aDogd2lk
dGgsCisgICAgICAgICAgICB3cmFwcGVyV2lkdGg6IGQud3JhcHBlci5jbGllbnRXaWR0aH07Cisg
IH0KKworICBmdW5jdGlvbiBwYXRjaERpc3BsYXkoY20sIGZyb20sIHRvLCBpbnRhY3QsIHVwZGF0
ZU51bWJlcnNGcm9tKSB7CisgICAgZnVuY3Rpb24ga2lsbE5vZGUobm9kZSkgeworICAgICAgdmFy
IHRtcCA9IG5vZGUubmV4dFNpYmxpbmc7CisgICAgICBub2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hp
bGQobm9kZSk7CisgICAgICByZXR1cm4gdG1wOworICAgIH0KKyAgICB2YXIgZGltcyA9IGdldERp
bWVuc2lvbnMoY20pOworICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheSwgbGluZU51bWJlcnMg
PSBjbS5vcHRpb25zLmxpbmVOdW1iZXJzOworICAgIC8vIFRoZSBmaXJzdCBwYXNzIHJlbW92ZXMg
dGhlIERPTSBub2RlcyB0aGF0IGFyZW4ndCBpbnRhY3QuCisgICAgaWYgKCFpbnRhY3QubGVuZ3Ro
KSB7CisgICAgICAvLyBvbGQgSUUgZG9lcyBiYWQgdGhpbmdzIHRvIG5vZGVzIHdoZW4gLmlubmVy
SFRNTCA9ICIiIGlzIHVzZWQgb24gYSBwYXJlbnQKKyAgICAgIC8vIHdlIHN0aWxsIG5lZWQgd2lk
Z2V0cyBhbmQgbWFya2VycyBpbnRhY3QgdG8gYWRkIGJhY2sgdG8gdGhlIG5ldyBjb250ZW50IGxh
dGVyCisgICAgICBpZiAoaWVfbHQxMCkgZm9yICh2YXIgbGQgPSBkaXNwbGF5LmxpbmVEaXYsIHRt
cCA9IGxkLmZpcnN0Q2hpbGQ7IHRtcDsgdG1wID0gbGQuZmlyc3RDaGlsZCkgbGQucmVtb3ZlQ2hp
bGQodG1wKTsKKyAgICAgIGVsc2UgcmVtb3ZlQ2hpbGRyZW4oZGlzcGxheS5saW5lRGl2KTsKKyAg
ICB9IGVsc2UgeworICAgICAgdmFyIGRvbVBvcyA9IDAsIGN1ck5vZGUgPSBkaXNwbGF5LmxpbmVE
aXYuZmlyc3RDaGlsZCwgbjsKKyAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW50YWN0Lmxlbmd0
aDsgKytpKSB7CisgICAgICAgIHZhciBjdXIgPSBpbnRhY3RbaV07CisgICAgICAgIHdoaWxlIChj
dXIuZG9tU3RhcnQgPiBkb21Qb3MpIHtjdXJOb2RlID0ga2lsbE5vZGUoY3VyTm9kZSk7IGRvbVBv
cysrO30KKyAgICAgICAgZm9yICh2YXIgaiA9IGN1ci5mcm9tLCBlID0gY3VyLnRvOyBqIDwgZTsg
KytqKSB7CisgICAgICAgICAgaWYgKGxpbmVOdW1iZXJzICYmIHVwZGF0ZU51bWJlcnNGcm9tIDw9
IGogJiYgY3VyTm9kZS5maXJzdENoaWxkKQorICAgICAgICAgICAgc2V0VGV4dENvbnRlbnQoY3Vy
Tm9kZS5maXJzdENoaWxkLmZpcnN0Q2hpbGQsIGxpbmVOdW1iZXJGb3IoY20ub3B0aW9ucywgaikp
OworICAgICAgICAgIGN1ck5vZGUgPSBjdXJOb2RlLm5leHRTaWJsaW5nOyBkb21Qb3MrKzsKICAg
ICAgICAgfQogICAgICAgfQorICAgICAgd2hpbGUgKGN1ck5vZGUpIGN1ck5vZGUgPSBraWxsTm9k
ZShjdXJOb2RlKTsKKyAgICB9CisgICAgLy8gVGhpcyBwYXNzIGZpbGxzIGluIHRoZSBsaW5lcyB0
aGF0IGFjdHVhbGx5IGNoYW5nZWQuCisgICAgdmFyIG5leHRJbnRhY3QgPSBpbnRhY3Quc2hpZnQo
KSwgY3VyTm9kZSA9IGRpc3BsYXkubGluZURpdi5maXJzdENoaWxkOworICAgIHZhciBqID0gZnJv
bTsKKworICAgIGNtLnZpZXcuZG9jLml0ZXIoZnJvbSwgdG8sIGZ1bmN0aW9uKGxpbmUpIHsKKyAg
ICAgIGlmIChuZXh0SW50YWN0ICYmIG5leHRJbnRhY3QudG8gPT0gaikgbmV4dEludGFjdCA9IGlu
dGFjdC5zaGlmdCgpOworICAgICAgaWYgKCFuZXh0SW50YWN0IHx8IG5leHRJbnRhY3QuZnJvbSA+
IGopCisgICAgICAgIGRpc3BsYXkubGluZURpdi5pbnNlcnRCZWZvcmUoYnVpbGRMaW5lRWxlbWVu
dChjbSwgbGluZSwgaiwgZGltcyksIGN1ck5vZGUpOworICAgICAgZWxzZQorICAgICAgICBjdXJO
b2RlID0gY3VyTm9kZS5uZXh0U2libGluZzsKKyAgICAgICsrajsKKyAgICB9KTsKKyAgfQogCi0g
ICAgICBmdW5jdGlvbiBkb25lKGUpIHsKLSAgICAgICAgY2xlYXJUaW1lb3V0KGdvaW5nKTsKLSAg
ICAgICAgdmFyIGN1ciA9IHBvc0Zyb21Nb3VzZShlKTsKLSAgICAgICAgaWYgKGN1cikgZG9TZWxl
Y3QoY3VyKTsKLSAgICAgICAgZV9wcmV2ZW50RGVmYXVsdChlKTsKLSAgICAgICAgZm9jdXNJbnB1
dCgpOwotICAgICAgICB1cGRhdGVJbnB1dCA9IHRydWU7Ci0gICAgICAgIG1vdmUoKTsgdXAoKTsK
LSAgICAgIH0KLSAgICAgIHZhciBtb3ZlID0gY29ubmVjdChkb2N1bWVudCwgIm1vdXNlbW92ZSIs
IG9wZXJhdGlvbihmdW5jdGlvbihlKSB7Ci0gICAgICAgIGNsZWFyVGltZW91dChnb2luZyk7Ci0g
ICAgICAgIGVfcHJldmVudERlZmF1bHQoZSk7Ci0gICAgICAgIGlmICghaWUgJiYgIWVfYnV0dG9u
KGUpKSBkb25lKGUpOwotICAgICAgICBlbHNlIGV4dGVuZChlKTsKLSAgICAgIH0pLCB0cnVlKTsK
LSAgICAgIHZhciB1cCA9IGNvbm5lY3QoZG9jdW1lbnQsICJtb3VzZXVwIiwgb3BlcmF0aW9uKGRv
bmUpLCB0cnVlKTsKLSAgICB9Ci0gICAgZnVuY3Rpb24gb25Eb3VibGVDbGljayhlKSB7Ci0gICAg
ICBmb3IgKHZhciBuID0gZV90YXJnZXQoZSk7IG4gIT0gd3JhcHBlcjsgbiA9IG4ucGFyZW50Tm9k
ZSkKLSAgICAgICAgaWYgKG4ucGFyZW50Tm9kZSA9PSBndXR0ZXJUZXh0KSByZXR1cm4gZV9wcmV2
ZW50RGVmYXVsdChlKTsKLSAgICAgIGVfcHJldmVudERlZmF1bHQoZSk7CisgIGZ1bmN0aW9uIGJ1
aWxkTGluZUVsZW1lbnQoY20sIGxpbmUsIGxpbmVObywgZGltcykgeworICAgIGlmIChsaW5lLmhl
aWdodCA9PSAwKSByZXR1cm4gZWx0KCJkaXYiKTsKKworICAgIHZhciBsaW5lRWxlbWVudCA9IGxp
bmUuaGVpZ2h0ID09IDAgPyBlbHQoImRpdiIpIDogbGluZUNvbnRlbnQoY20sIGxpbmUpOworICAg
IHZhciBtYXJrZXJzID0gbGluZS5ndXR0ZXJNYXJrZXJzLCBkaXNwbGF5ID0gY20uZGlzcGxheTsK
KworICAgIGlmICghY20ub3B0aW9ucy5saW5lTnVtYmVycyAmJiAhbWFya2VycyAmJiAhbGluZS5i
Z0NsYXNzICYmICFsaW5lLndyYXBDbGFzcyAmJgorICAgICAgICAoIWxpbmUud2lkZ2V0cyB8fCAh
bGluZS53aWRnZXRzLmxlbmd0aCkpIHJldHVybiBsaW5lRWxlbWVudDsKKworICAgIC8vIExpbmVz
IHdpdGggZ3V0dGVyIGVsZW1lbnRzIG9yIGEgYmFja2dyb3VuZCBjbGFzcyBuZWVkCisgICAgLy8g
dG8gYmUgd3JhcHBlZCBhZ2FpbiwgYW5kIGhhdmUgdGhlIGV4dHJhIGVsZW1lbnRzIGFkZGVkCisg
ICAgLy8gdG8gdGhlIHdyYXBwZXIgZGl2CisKKyAgICB2YXIgd3JhcCA9IGVsdCgiZGl2IiwgbnVs
bCwgbGluZS53cmFwQ2xhc3MsICJwb3NpdGlvbjogcmVsYXRpdmUiKTsKKyAgICBpZiAoY20ub3B0
aW9ucy5saW5lTnVtYmVycyB8fCBtYXJrZXJzKSB7CisgICAgICB2YXIgZ3V0dGVyV3JhcCA9IHdy
YXAuYXBwZW5kQ2hpbGQoZWx0KCJkaXYiLCBudWxsLCBudWxsLCAicG9zaXRpb246IGFic29sdXRl
OyBsZWZ0OiAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGltcy5maXhlZFBvcyArICJweCIpKTsKKyAgICAgIHdyYXAuYWxpZ25hYmxlID0gW2d1dHRlcldy
YXBdOworICAgICAgaWYgKGNtLm9wdGlvbnMubGluZU51bWJlcnMpCisgICAgICAgIGd1dHRlcldy
YXAuYXBwZW5kQ2hpbGQoZWx0KCJkaXYiLCBsaW5lTnVtYmVyRm9yKGNtLm9wdGlvbnMsIGxpbmVO
byksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb2RlTWlycm9yLWxpbmVu
dW1iZXIgQ29kZU1pcnJvci1ndXR0ZXItZWx0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgImxlZnQ6ICIgKyBkaW1zLmd1dHRlckxlZnRbIkNvZGVNaXJyb3ItbGluZW51bWJl
cnMiXSArICJweDsgd2lkdGg6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KyBkaXNwbGF5LmxpbmVOdW1Jbm5lcldpZHRoICsgInB4IikpOworICAgICAgaWYgKG1hcmtlcnMp
CisgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgY20ub3B0aW9ucy5ndXR0ZXJzLmxlbmd0aDsg
KytrKSB7CisgICAgICAgICAgdmFyIGlkID0gY20ub3B0aW9ucy5ndXR0ZXJzW2tdLCBmb3VuZCA9
IG1hcmtlcnMuaGFzT3duUHJvcGVydHkoaWQpICYmIG1hcmtlcnNbaWRdOworICAgICAgICAgIGlm
IChmb3VuZCkgeworICAgICAgICAgICAgZ3V0dGVyV3JhcC5hcHBlbmRDaGlsZChlbHQoImRpdiIs
IFtmb3VuZF0sICJDb2RlTWlycm9yLWd1dHRlci1lbHQiLCAibGVmdDogIiArCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaW1zLmd1dHRlckxlZnRbaWRdICsgInB4OyB3
aWR0aDogIiArIGRpbXMuZ3V0dGVyV2lkdGhbaWRdICsgInB4IikpOworICAgICAgICAgIH0KKyAg
ICAgICAgfQogICAgIH0KLSAgICBmdW5jdGlvbiBvbkRyb3AoZSkgewotICAgICAgaWYgKG9wdGlv
bnMub25EcmFnRXZlbnQgJiYgb3B0aW9ucy5vbkRyYWdFdmVudChpbnN0YW5jZSwgYWRkU3RvcChl
KSkpIHJldHVybjsKLSAgICAgIGVfcHJldmVudERlZmF1bHQoZSk7Ci0gICAgICB2YXIgcG9zID0g
cG9zRnJvbU1vdXNlKGUsIHRydWUpLCBmaWxlcyA9IGUuZGF0YVRyYW5zZmVyLmZpbGVzOwotICAg
ICAgaWYgKCFwb3MgfHwgb3B0aW9ucy5yZWFkT25seSkgcmV0dXJuOwotICAgICAgaWYgKGZpbGVz
ICYmIGZpbGVzLmxlbmd0aCAmJiB3aW5kb3cuRmlsZVJlYWRlciAmJiB3aW5kb3cuRmlsZSkgewot
ICAgICAgICB2YXIgbiA9IGZpbGVzLmxlbmd0aCwgdGV4dCA9IEFycmF5KG4pLCByZWFkID0gMDsK
LSAgICAgICAgdmFyIGxvYWRGaWxlID0gZnVuY3Rpb24oZmlsZSwgaSkgewotICAgICAgICAgIHZh
ciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcjsKLSAgICAgICAgICByZWFkZXIub25sb2FkID0gZnVu
Y3Rpb24oKSB7Ci0gICAgICAgICAgICB0ZXh0W2ldID0gcmVhZGVyLnJlc3VsdDsKLSAgICAgICAg
ICAgIGlmICgrK3JlYWQgPT0gbikgewotICAgICAgICAgICAgICBwb3MgPSBjbGlwUG9zKHBvcyk7
Ci0gICAgICAgICAgICAgIG9wZXJhdGlvbihmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB2
YXIgZW5kID0gcmVwbGFjZVJhbmdlKHRleHQuam9pbigiIiksIHBvcywgcG9zKTsKLSAgICAgICAg
ICAgICAgICBzZXRTZWxlY3Rpb25Vc2VyKHBvcywgZW5kKTsKLSAgICAgICAgICAgICAgfSkoKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICB9OwotICAgICAgICAgIHJlYWRlci5yZWFkQXNUZXh0
KGZpbGUpOwotICAgICAgICB9OwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSkg
bG9hZEZpbGUoZmlsZXNbaV0sIGkpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgLy8gRG9uJ3Qg
ZG8gYSByZXBsYWNlIGlmIHRoZSBkcm9wIGhhcHBlbmVkIGluc2lkZSBvZiB0aGUgc2VsZWN0ZWQg
dGV4dC4KLSAgICAgICAgaWYgKGRyYWdnaW5nVGV4dCAmJiAhKHBvc0xlc3MocG9zLCBzZWwuZnJv
bSkgfHwgcG9zTGVzcyhzZWwudG8sIHBvcykpKSByZXR1cm47Ci0gICAgICAgIHRyeSB7Ci0gICAg
ICAgICAgdmFyIHRleHQgPSBlLmRhdGFUcmFuc2Zlci5nZXREYXRhKCJUZXh0Iik7Ci0gICAgICAg
ICAgaWYgKHRleHQpIHsKLSAgICAgICAgICAgIGNvbXBvdW5kQ2hhbmdlKGZ1bmN0aW9uKCkgewot
ICAgICAgICAgICAgICB2YXIgY3VyRnJvbSA9IHNlbC5mcm9tLCBjdXJUbyA9IHNlbC50bzsKLSAg
ICAgICAgICAgICAgc2V0U2VsZWN0aW9uVXNlcihwb3MsIHBvcyk7Ci0gICAgICAgICAgICAgIGlm
IChkcmFnZ2luZ1RleHQpIHJlcGxhY2VSYW5nZSgiIiwgY3VyRnJvbSwgY3VyVG8pOwotICAgICAg
ICAgICAgICByZXBsYWNlU2VsZWN0aW9uKHRleHQpOwotICAgICAgICAgICAgICBmb2N1c0lucHV0
KCk7Ci0gICAgICAgICAgICB9KTsKKyAgICAvLyBLbHVkZ2UgdG8gbWFrZSBzdXJlIHRoZSBzdHls
ZWQgZWxlbWVudCBsaWVzIGJlaGluZCB0aGUgc2VsZWN0aW9uIChieSB6LWluZGV4KQorICAgIGlm
IChsaW5lLmJnQ2xhc3MpCisgICAgICB3cmFwLmFwcGVuZENoaWxkKGVsdCgiZGl2IiwgIlx1MDBh
MCIsIGxpbmUuYmdDbGFzcyArICIgQ29kZU1pcnJvci1saW5lYmFja2dyb3VuZCIpKTsKKyAgICB3
cmFwLmFwcGVuZENoaWxkKGxpbmVFbGVtZW50KTsKKyAgICBpZiAobGluZS53aWRnZXRzKQorICAg
ICAgZm9yICh2YXIgaSA9IDAsIHdzID0gbGluZS53aWRnZXRzOyBpIDwgd3MubGVuZ3RoOyArK2kp
IHsKKyAgICAgICAgdmFyIHdpZGdldCA9IHdzW2ldLCBub2RlID0gZWx0KCJkaXYiLCBbd2lkZ2V0
Lm5vZGVdLCAiQ29kZU1pcnJvci1saW5ld2lkZ2V0Iik7CisgICAgICAgIG5vZGUud2lkZ2V0ID0g
d2lkZ2V0OworICAgICAgICBpZiAod2lkZ2V0Lm5vSFNjcm9sbCkgeworICAgICAgICAgICh3cmFw
LmFsaWduYWJsZSB8fCAod3JhcC5hbGlnbmFibGUgPSBbXSkpLnB1c2gobm9kZSk7CisgICAgICAg
ICAgdmFyIHdpZHRoID0gZGltcy53cmFwcGVyV2lkdGg7CisgICAgICAgICAgbm9kZS5zdHlsZS5s
ZWZ0ID0gZGltcy5maXhlZFBvcyArICJweCI7CisgICAgICAgICAgaWYgKCF3aWRnZXQuY292ZXJH
dXR0ZXIpIHsKKyAgICAgICAgICAgIHdpZHRoIC09IGRpbXMuZ3V0dGVyVG90YWxXaWR0aDsKKyAg
ICAgICAgICAgIG5vZGUuc3R5bGUucGFkZGluZ0xlZnQgPSBkaW1zLmd1dHRlclRvdGFsV2lkdGgg
KyAicHgiOwogICAgICAgICAgIH0KKyAgICAgICAgICBub2RlLnN0eWxlLndpZHRoID0gd2lkdGgg
KyAicHgiOwogICAgICAgICB9Ci0gICAgICAgIGNhdGNoKGUpe30KKyAgICAgICAgaWYgKHdpZGdl
dC5jb3Zlckd1dHRlcikgeworICAgICAgICAgIG5vZGUuc3R5bGUuekluZGV4ID0gNTsKKyAgICAg
ICAgICBub2RlLnN0eWxlLnBvc2l0aW9uID0gInJlbGF0aXZlIjsKKyAgICAgICAgICBpZiAoIXdp
ZGdldC5ub0hTY3JvbGwpIG5vZGUuc3R5bGUubWFyZ2luTGVmdCA9IC1kaW1zLmd1dHRlclRvdGFs
V2lkdGggKyAicHgiOworICAgICAgICB9CisgICAgICAgIGlmICh3aWRnZXQuYWJvdmUpCisgICAg
ICAgICAgd3JhcC5pbnNlcnRCZWZvcmUobm9kZSwgY20ub3B0aW9ucy5saW5lTnVtYmVycyAmJiBs
aW5lLmhlaWdodCAhPSAwID8gZ3V0dGVyV3JhcCA6IGxpbmVFbGVtZW50KTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgIHdyYXAuYXBwZW5kQ2hpbGQobm9kZSk7CiAgICAgICB9CisKKyAgICBpZiAo
aWVfbHQ4KSB3cmFwLnN0eWxlLnpJbmRleCA9IDI7CisgICAgcmV0dXJuIHdyYXA7CisgIH0KKwor
ICAvLyBTRUxFQ1RJT04gLyBDVVJTT1IKKworICBmdW5jdGlvbiBzZWxIZWFkKHZpZXcpIHsKKyAg
ICByZXR1cm4gdmlldy5zZWwuaW52ZXJ0ZWQgPyB2aWV3LnNlbC5mcm9tIDogdmlldy5zZWwudG87
CisgIH0KKworICBmdW5jdGlvbiB1cGRhdGVTZWxlY3Rpb24oY20pIHsKKyAgICB2YXIgaGVhZFBv
cyA9IHBvc0VxKGNtLnZpZXcuc2VsLmZyb20sIGNtLnZpZXcuc2VsLnRvKSA/CisgICAgICB1cGRh
dGVTZWxlY3Rpb25DdXJzb3IoY20pIDoKKyAgICAgIHVwZGF0ZVNlbGVjdGlvblJhbmdlKGNtKTsK
KyAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXk7CisgICAgLy8gTW92ZSB0aGUgaGlkZGVuIHRl
eHRhcmVhIG5lYXIgdGhlIGN1cnNvciB0byBwcmV2ZW50IHNjcm9sbGluZyBhcnRpZmFjdHMKKyAg
ICB2YXIgd3JhcE9mZiA9IGRpc3BsYXkud3JhcHBlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSwg
bGluZU9mZiA9IGRpc3BsYXkubGluZURpdi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKKyAgICBk
aXNwbGF5LmlucHV0RGl2LnN0eWxlLnRvcCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGRpc3BsYXku
d3JhcHBlci5jbGllbnRIZWlnaHQgLSAxMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRQb3MudG9wICsgbGluZU9mZi50b3AgLSB3cmFw
T2ZmLnRvcCkpICsgInB4IjsKKyAgICBkaXNwbGF5LmlucHV0RGl2LnN0eWxlLmxlZnQgPSBNYXRo
Lm1heCgwLCBNYXRoLm1pbihkaXNwbGF5LndyYXBwZXIuY2xpZW50V2lkdGggLSAxMCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkUG9z
LmxlZnQgKyBsaW5lT2ZmLmxlZnQgLSB3cmFwT2ZmLmxlZnQpKSArICJweCI7CisgIH0KKworICAv
LyBObyBzZWxlY3Rpb24sIHBsYWluIGN1cnNvcgorICBmdW5jdGlvbiB1cGRhdGVTZWxlY3Rpb25D
dXJzb3IoY20pIHsKKyAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXksIHBvcyA9IGN1cnNvckNv
b3JkcyhjbSwgY20udmlldy5zZWwuZnJvbSwgImRpdiIpOworICAgIGRpc3BsYXkuY3Vyc29yLnN0
eWxlLmxlZnQgPSBwb3MubGVmdCArICJweCI7CisgICAgZGlzcGxheS5jdXJzb3Iuc3R5bGUudG9w
ID0gcG9zLnRvcCArICJweCI7CisgICAgZGlzcGxheS5jdXJzb3Iuc3R5bGUuaGVpZ2h0ID0gTWF0
aC5tYXgoMCwgcG9zLmJvdHRvbSAtIHBvcy50b3ApICogY20ub3B0aW9ucy5jdXJzb3JIZWlnaHQg
KyAicHgiOworICAgIGRpc3BsYXkuY3Vyc29yLnN0eWxlLmRpc3BsYXkgPSAiIjsKKyAgICBkaXNw
bGF5LnNlbGVjdGlvbkRpdi5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOworCisgICAgaWYgKHBvcy5v
dGhlcikgeworICAgICAgZGlzcGxheS5vdGhlckN1cnNvci5zdHlsZS5kaXNwbGF5ID0gIiI7Cisg
ICAgICBkaXNwbGF5Lm90aGVyQ3Vyc29yLnN0eWxlLmxlZnQgPSBwb3Mub3RoZXIubGVmdCArICJw
eCI7CisgICAgICBkaXNwbGF5Lm90aGVyQ3Vyc29yLnN0eWxlLnRvcCA9IHBvcy5vdGhlci50b3Ag
KyAicHgiOworICAgICAgZGlzcGxheS5vdGhlckN1cnNvci5zdHlsZS5oZWlnaHQgPSAocG9zLm90
aGVyLmJvdHRvbSAtIHBvcy5vdGhlci50b3ApICogLjg1ICsgInB4IjsKKyAgICB9IGVsc2UgeyBk
aXNwbGF5Lm90aGVyQ3Vyc29yLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7IH0KKyAgICByZXR1cm4g
cG9zOworICB9CisKKyAgLy8gSGlnaGxpZ2h0IHNlbGVjdGlvbgorICBmdW5jdGlvbiB1cGRhdGVT
ZWxlY3Rpb25SYW5nZShjbSkgeworICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheSwgZG9jID0g
Y20udmlldy5kb2MsIHNlbCA9IGNtLnZpZXcuc2VsOworICAgIHZhciBmcmFnbWVudCA9IGRvY3Vt
ZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKKyAgICB2YXIgY2xpZW50V2lkdGggPSBkaXNw
bGF5LmxpbmVTcGFjZS5vZmZzZXRXaWR0aCwgcGwgPSBwYWRkaW5nTGVmdChjbS5kaXNwbGF5KTsK
KworICAgIGZ1bmN0aW9uIGFkZChsZWZ0LCB0b3AsIHdpZHRoLCBib3R0b20pIHsKKyAgICAgIGlm
ICh0b3AgPCAwKSB0b3AgPSAwOworICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoZWx0KCJkaXYi
LCBudWxsLCAiQ29kZU1pcnJvci1zZWxlY3RlZCIsICJwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6
ICIgKyBsZWZ0ICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHg7IHRvcDogIiAr
IHRvcCArICJweDsgd2lkdGg6ICIgKyAod2lkdGggPT0gbnVsbCA/IGNsaWVudFdpZHRoIC0gbGVm
dCA6IHdpZHRoKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB4OyBoZWlnaHQ6
ICIgKyAoYm90dG9tIC0gdG9wKSArICJweCIpKTsKICAgICB9Ci0gICAgZnVuY3Rpb24gb25EcmFn
U3RhcnQoZSkgewotICAgICAgdmFyIHR4dCA9IGdldFNlbGVjdGlvbigpOwotICAgICAgZS5kYXRh
VHJhbnNmZXIuc2V0RGF0YSgiVGV4dCIsIHR4dCk7CiAKLSAgICAgIC8vIFVzZSBkdW1teSBpbWFn
ZSBpbnN0ZWFkIG9mIGRlZmF1bHQgYnJvd3NlcnMgaW1hZ2UuCi0gICAgICBpZiAoZ2Vja28gfHwg
Y2hyb21lIHx8IG9wZXJhKSB7Ci0gICAgICAgIHZhciBpbWcgPSBlbHQoJ2ltZycpOwotICAgICAg
ICBpbWcuc2NyID0gJ2RhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RkaEFnQUNBSUFBQUFBQUFQ
Ly8veXdBQUFBQUFnQUNBQUFDQW9SUkFEcz0nOyAvLzF4MSBpbWFnZQotICAgICAgICBlLmRhdGFU
cmFuc2Zlci5zZXREcmFnSW1hZ2UoaW1nLCAwLCAwKTsKKyAgICBmdW5jdGlvbiBkcmF3Rm9yTGlu
ZShsaW5lLCBmcm9tQXJnLCB0b0FyZywgcmV0VG9wKSB7CisgICAgICB2YXIgbGluZU9iaiA9IGdl
dExpbmUoZG9jLCBsaW5lKTsKKyAgICAgIHZhciBsaW5lTGVuID0gbGluZU9iai50ZXh0Lmxlbmd0
aCwgclZhbCA9IHJldFRvcCA/IEluZmluaXR5IDogLUluZmluaXR5OworICAgICAgZnVuY3Rpb24g
Y29vcmRzKGNoKSB7CisgICAgICAgIHJldHVybiBjaGFyQ29vcmRzKGNtLCB7bGluZTogbGluZSwg
Y2g6IGNofSwgImRpdiIsIGxpbmVPYmopOwogICAgICAgfQorCisgICAgICBpdGVyYXRlQmlkaVNl
Y3Rpb25zKGdldE9yZGVyKGxpbmVPYmopLCBmcm9tQXJnIHx8IDAsIHRvQXJnID09IG51bGwgPyBs
aW5lTGVuIDogdG9BcmcsIGZ1bmN0aW9uKGZyb20sIHRvLCBkaXIpIHsKKyAgICAgICAgdmFyIGxl
ZnRQb3MgPSBjb29yZHMoZGlyID09ICJydGwiID8gdG8gLSAxIDogZnJvbSk7CisgICAgICAgIHZh
ciByaWdodFBvcyA9IGNvb3JkcyhkaXIgPT0gInJ0bCIgPyBmcm9tIDogdG8gLSAxKTsKKyAgICAg
ICAgdmFyIGxlZnQgPSBsZWZ0UG9zLmxlZnQsIHJpZ2h0ID0gcmlnaHRQb3MucmlnaHQ7CisgICAg
ICAgIGlmIChyaWdodFBvcy50b3AgLSBsZWZ0UG9zLnRvcCA+IDMpIHsgLy8gRGlmZmVyZW50IGxp
bmVzLCBkcmF3IHRvcCBwYXJ0CisgICAgICAgICAgYWRkKGxlZnQsIGxlZnRQb3MudG9wLCBudWxs
LCBsZWZ0UG9zLmJvdHRvbSk7CisgICAgICAgICAgbGVmdCA9IHBsOworICAgICAgICAgIGlmIChs
ZWZ0UG9zLmJvdHRvbSA8IHJpZ2h0UG9zLnRvcCkgYWRkKGxlZnQsIGxlZnRQb3MuYm90dG9tLCBu
dWxsLCByaWdodFBvcy50b3ApOworICAgICAgICB9CisgICAgICAgIGlmICh0b0FyZyA9PSBudWxs
ICYmIHRvID09IGxpbmVMZW4pIHJpZ2h0ID0gY2xpZW50V2lkdGg7CisgICAgICAgIGlmIChmcm9t
QXJnID09IG51bGwgJiYgZnJvbSA9PSAwKSBsZWZ0ID0gcGw7CisgICAgICAgIHJWYWwgPSByZXRU
b3AgPyBNYXRoLm1pbihyaWdodFBvcy50b3AsIHJWYWwpIDogTWF0aC5tYXgocmlnaHRQb3MuYm90
dG9tLCByVmFsKTsKKyAgICAgICAgaWYgKGxlZnQgPCBwbCArIDEpIGxlZnQgPSBwbDsKKyAgICAg
ICAgYWRkKGxlZnQsIHJpZ2h0UG9zLnRvcCwgcmlnaHQgLSBsZWZ0LCByaWdodFBvcy5ib3R0b20p
OworICAgICAgfSk7CisgICAgICByZXR1cm4gclZhbDsKICAgICB9CiAKLSAgICBmdW5jdGlvbiBk
b0hhbmRsZUJpbmRpbmcoYm91bmQsIGRyb3BTaGlmdCkgewotICAgICAgaWYgKHR5cGVvZiBib3Vu
ZCA9PSAic3RyaW5nIikgewotICAgICAgICBib3VuZCA9IGNvbW1hbmRzW2JvdW5kXTsKLSAgICAg
ICAgaWYgKCFib3VuZCkgcmV0dXJuIGZhbHNlOworICAgIGlmIChzZWwuZnJvbS5saW5lID09IHNl
bC50by5saW5lKSB7CisgICAgICBkcmF3Rm9yTGluZShzZWwuZnJvbS5saW5lLCBzZWwuZnJvbS5j
aCwgc2VsLnRvLmNoKTsKKyAgICB9IGVsc2UgeworICAgICAgdmFyIGZyb21PYmogPSBnZXRMaW5l
KGRvYywgc2VsLmZyb20ubGluZSk7CisgICAgICB2YXIgY3VyID0gZnJvbU9iaiwgbWVyZ2VkLCBw
YXRoID0gW3NlbC5mcm9tLmxpbmUsIHNlbC5mcm9tLmNoXSwgc2luZ2xlTGluZTsKKyAgICAgIHdo
aWxlIChtZXJnZWQgPSBjb2xsYXBzZWRTcGFuQXRFbmQoY3VyKSkgeworICAgICAgICB2YXIgZm91
bmQgPSBtZXJnZWQuZmluZCgpOworICAgICAgICBwYXRoLnB1c2goZm91bmQuZnJvbS5jaCwgZm91
bmQudG8ubGluZSwgZm91bmQudG8uY2gpOworICAgICAgICBpZiAoZm91bmQudG8ubGluZSA9PSBz
ZWwudG8ubGluZSkgeworICAgICAgICAgIHBhdGgucHVzaChzZWwudG8uY2gpOworICAgICAgICAg
IHNpbmdsZUxpbmUgPSB0cnVlOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGN1ciA9IGdldExpbmUoZG9jLCBmb3VuZC50by5saW5lKTsKICAgICAgIH0KLSAgICAgIHZhciBw
cmV2U2hpZnQgPSBzaGlmdFNlbGVjdGluZzsKLSAgICAgIHRyeSB7Ci0gICAgICAgIGlmIChvcHRp
b25zLnJlYWRPbmx5KSBzdXBwcmVzc0VkaXRzID0gdHJ1ZTsKLSAgICAgICAgaWYgKGRyb3BTaGlm
dCkgc2hpZnRTZWxlY3RpbmcgPSBudWxsOwotICAgICAgICBib3VuZChpbnN0YW5jZSk7Ci0gICAg
ICB9IGNhdGNoKGUpIHsKLSAgICAgICAgaWYgKGUgIT0gUGFzcykgdGhyb3cgZTsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgc2hpZnRTZWxlY3Rpbmcg
PSBwcmV2U2hpZnQ7Ci0gICAgICAgIHN1cHByZXNzRWRpdHMgPSBmYWxzZTsKKworICAgICAgLy8g
VGhpcyBpcyBhIHNpbmdsZSwgbWVyZ2VkIGxpbmUKKyAgICAgIGlmIChzaW5nbGVMaW5lKSB7Cisg
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkgKz0gMykKKyAgICAgICAg
ICBkcmF3Rm9yTGluZShwYXRoW2ldLCBwYXRoW2krMV0sIHBhdGhbaSsyXSk7CisgICAgICB9IGVs
c2UgeworICAgICAgICB2YXIgbWlkZGxlVG9wLCBtaWRkbGVCb3QsIHRvT2JqID0gZ2V0TGluZShk
b2MsIHNlbC50by5saW5lKTsKKyAgICAgICAgaWYgKHNlbC5mcm9tLmNoKQorICAgICAgICAgIC8v
IERyYXcgdGhlIGZpcnN0IGxpbmUgb2Ygc2VsZWN0aW9uLgorICAgICAgICAgIG1pZGRsZVRvcCA9
IGRyYXdGb3JMaW5lKHNlbC5mcm9tLmxpbmUsIHNlbC5mcm9tLmNoLCBudWxsLCBmYWxzZSk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAvLyBTaW1wbHkgaW5jbHVkZSBpdCBpbiB0aGUgbWlkZGxl
IGJsb2NrLgorICAgICAgICAgIG1pZGRsZVRvcCA9IGhlaWdodEF0TGluZShjbSwgZnJvbU9iaikg
LSBkaXNwbGF5LnZpZXdPZmZzZXQ7CisKKyAgICAgICAgaWYgKCFzZWwudG8uY2gpCisgICAgICAg
ICAgbWlkZGxlQm90ID0gaGVpZ2h0QXRMaW5lKGNtLCB0b09iaikgLSBkaXNwbGF5LnZpZXdPZmZz
ZXQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBtaWRkbGVCb3QgPSBkcmF3Rm9yTGluZShzZWwu
dG8ubGluZSwgY29sbGFwc2VkU3BhbkF0U3RhcnQodG9PYmopID8gbnVsbCA6IDAsIHNlbC50by5j
aCwgdHJ1ZSk7CisKKyAgICAgICAgaWYgKG1pZGRsZVRvcCA8IG1pZGRsZUJvdCkgYWRkKHBsLCBt
aWRkbGVUb3AsIG51bGwsIG1pZGRsZUJvdCk7CiAgICAgICB9Ci0gICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9Ci0gICAgdmFyIG1heWJlVHJhbnNpdGlvbjsKLSAgICBmdW5jdGlvbiBoYW5kbGVLZXlC
aW5kaW5nKGUpIHsKLSAgICAgIC8vIEhhbmRsZSBhdXRvIGtleW1hcCB0cmFuc2l0aW9ucwotICAg
ICAgdmFyIHN0YXJ0TWFwID0gZ2V0S2V5TWFwKG9wdGlvbnMua2V5TWFwKSwgbmV4dCA9IHN0YXJ0
TWFwLmF1dG87Ci0gICAgICBjbGVhclRpbWVvdXQobWF5YmVUcmFuc2l0aW9uKTsKLSAgICAgIGlm
IChuZXh0ICYmICFpc01vZGlmaWVyS2V5KGUpKSBtYXliZVRyYW5zaXRpb24gPSBzZXRUaW1lb3V0
KGZ1bmN0aW9uKCkgewotICAgICAgICBpZiAoZ2V0S2V5TWFwKG9wdGlvbnMua2V5TWFwKSA9PSBz
dGFydE1hcCkgewotICAgICAgICAgIG9wdGlvbnMua2V5TWFwID0gKG5leHQuY2FsbCA/IG5leHQu
Y2FsbChudWxsLCBpbnN0YW5jZSkgOiBuZXh0KTsKLSAgICAgICAgfQotICAgICAgfSwgNTApOwot
Ci0gICAgICB2YXIgbmFtZSA9IGtleU5hbWVzW2VfcHJvcChlLCAia2V5Q29kZSIpXSwgaGFuZGxl
ZCA9IGZhbHNlOwotICAgICAgaWYgKG5hbWUgPT0gbnVsbCB8fCBlLmFsdEdyYXBoS2V5KSByZXR1
cm4gZmFsc2U7Ci0gICAgICBpZiAoZV9wcm9wKGUsICJhbHRLZXkiKSkgbmFtZSA9ICJBbHQtIiAr
IG5hbWU7Ci0gICAgICBpZiAoZV9wcm9wKGUsICJjdHJsS2V5IikpIG5hbWUgPSAiQ3RybC0iICsg
bmFtZTsKLSAgICAgIGlmIChlX3Byb3AoZSwgIm1ldGFLZXkiKSkgbmFtZSA9ICJDbWQtIiArIG5h
bWU7Ci0KLSAgICAgIHZhciBzdG9wcGVkID0gZmFsc2U7Ci0gICAgICBmdW5jdGlvbiBzdG9wKCkg
eyBzdG9wcGVkID0gdHJ1ZTsgfQotCi0gICAgICBpZiAoZV9wcm9wKGUsICJzaGlmdEtleSIpKSB7
Ci0gICAgICAgIGhhbmRsZWQgPSBsb29rdXBLZXkoIlNoaWZ0LSIgKyBuYW1lLCBvcHRpb25zLmV4
dHJhS2V5cywgb3B0aW9ucy5rZXlNYXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVu
Y3Rpb24oYikge3JldHVybiBkb0hhbmRsZUJpbmRpbmcoYiwgdHJ1ZSk7fSwgc3RvcCkKLSAgICAg
ICAgICAgICAgIHx8IGxvb2t1cEtleShuYW1lLCBvcHRpb25zLmV4dHJhS2V5cywgb3B0aW9ucy5r
ZXlNYXAsIGZ1bmN0aW9uKGIpIHsKLSAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBiID09ICJz
dHJpbmciICYmIC9eZ29bQS1aXS8udGVzdChiKSkgcmV0dXJuIGRvSGFuZGxlQmluZGluZyhiKTsK
LSAgICAgICAgICAgICAgIH0sIHN0b3ApOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgaGFuZGxl
ZCA9IGxvb2t1cEtleShuYW1lLCBvcHRpb25zLmV4dHJhS2V5cywgb3B0aW9ucy5rZXlNYXAsIGRv
SGFuZGxlQmluZGluZywgc3RvcCk7Ci0gICAgICB9Ci0gICAgICBpZiAoc3RvcHBlZCkgaGFuZGxl
ZCA9IGZhbHNlOwotICAgICAgaWYgKGhhbmRsZWQpIHsKLSAgICAgICAgZV9wcmV2ZW50RGVmYXVs
dChlKTsKLSAgICAgICAgcmVzdGFydEJsaW5rKCk7Ci0gICAgICAgIGlmIChpZSkgeyBlLm9sZEtl
eUNvZGUgPSBlLmtleUNvZGU7IGUua2V5Q29kZSA9IDA7IH0KLSAgICAgIH0KLSAgICAgIHJldHVy
biBoYW5kbGVkOwotICAgIH0KLSAgICBmdW5jdGlvbiBoYW5kbGVDaGFyQmluZGluZyhlLCBjaCkg
ewotICAgICAgdmFyIGhhbmRsZWQgPSBsb29rdXBLZXkoIiciICsgY2ggKyAiJyIsIG9wdGlvbnMu
ZXh0cmFLZXlzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5rZXlNYXAs
IGZ1bmN0aW9uKGIpIHsgcmV0dXJuIGRvSGFuZGxlQmluZGluZyhiLCB0cnVlKTsgfSk7Ci0gICAg
ICBpZiAoaGFuZGxlZCkgewotICAgICAgICBlX3ByZXZlbnREZWZhdWx0KGUpOwotICAgICAgICBy
ZXN0YXJ0QmxpbmsoKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBoYW5kbGVkOwotICAgIH0KLQot
ICAgIHZhciBsYXN0U3RvcHBlZEtleSA9IG51bGw7Ci0gICAgZnVuY3Rpb24gb25LZXlEb3duKGUp
IHsKLSAgICAgIGlmICghZm9jdXNlZCkgb25Gb2N1cygpOwotICAgICAgaWYgKGllICYmIGUua2V5
Q29kZSA9PSAyNykgeyBlLnJldHVyblZhbHVlID0gZmFsc2U7IH0KLSAgICAgIGlmIChwb2xsaW5n
RmFzdCkgeyBpZiAocmVhZElucHV0KCkpIHBvbGxpbmdGYXN0ID0gZmFsc2U7IH0KLSAgICAgIGlm
IChvcHRpb25zLm9uS2V5RXZlbnQgJiYgb3B0aW9ucy5vbktleUV2ZW50KGluc3RhbmNlLCBhZGRT
dG9wKGUpKSkgcmV0dXJuOwotICAgICAgdmFyIGNvZGUgPSBlX3Byb3AoZSwgImtleUNvZGUiKTsK
LSAgICAgIC8vIElFIGRvZXMgc3RyYW5nZSB0aGluZ3Mgd2l0aCBlc2NhcGUuCi0gICAgICBzZXRT
aGlmdChjb2RlID09IDE2IHx8IGVfcHJvcChlLCAic2hpZnRLZXkiKSk7Ci0gICAgICAvLyBGaXJz
dCBnaXZlIG9uS2V5RXZlbnQgb3B0aW9uIGEgY2hhbmNlIHRvIGhhbmRsZSB0aGlzLgotICAgICAg
dmFyIGhhbmRsZWQgPSBoYW5kbGVLZXlCaW5kaW5nKGUpOwotICAgICAgaWYgKG9wZXJhKSB7Ci0g
ICAgICAgIGxhc3RTdG9wcGVkS2V5ID0gaGFuZGxlZCA/IGNvZGUgOiBudWxsOwotICAgICAgICAv
LyBPcGVyYSBoYXMgbm8gY3V0IGV2ZW50Li4uIHdlIHRyeSB0byBhdCBsZWFzdCBjYXRjaCB0aGUg
a2V5IGNvbWJvCi0gICAgICAgIGlmICghaGFuZGxlZCAmJiBjb2RlID09IDg4ICYmIGVfcHJvcChl
LCBtYWMgPyAibWV0YUtleSIgOiAiY3RybEtleSIpKQotICAgICAgICAgIHJlcGxhY2VTZWxlY3Rp
b24oIiIpOwotICAgICAgfQotICAgIH0KLSAgICBmdW5jdGlvbiBvbktleVByZXNzKGUpIHsKLSAg
ICAgIGlmIChwb2xsaW5nRmFzdCkgcmVhZElucHV0KCk7Ci0gICAgICBpZiAob3B0aW9ucy5vbktl
eUV2ZW50ICYmIG9wdGlvbnMub25LZXlFdmVudChpbnN0YW5jZSwgYWRkU3RvcChlKSkpIHJldHVy
bjsKLSAgICAgIHZhciBrZXlDb2RlID0gZV9wcm9wKGUsICJrZXlDb2RlIiksIGNoYXJDb2RlID0g
ZV9wcm9wKGUsICJjaGFyQ29kZSIpOwotICAgICAgaWYgKG9wZXJhICYmIGtleUNvZGUgPT0gbGFz
dFN0b3BwZWRLZXkpIHtsYXN0U3RvcHBlZEtleSA9IG51bGw7IGVfcHJldmVudERlZmF1bHQoZSk7
IHJldHVybjt9Ci0gICAgICBpZiAoKChvcGVyYSAmJiAoIWUud2hpY2ggfHwgZS53aGljaCA8IDEw
KSkgfHwga2h0bWwpICYmIGhhbmRsZUtleUJpbmRpbmcoZSkpIHJldHVybjsKLSAgICAgIHZhciBj
aCA9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2hhckNvZGUgPT0gbnVsbCA/IGtleUNvZGUgOiBjaGFy
Q29kZSk7Ci0gICAgICBpZiAob3B0aW9ucy5lbGVjdHJpY0NoYXJzICYmIG1vZGUuZWxlY3RyaWND
aGFycyAmJiBvcHRpb25zLnNtYXJ0SW5kZW50ICYmICFvcHRpb25zLnJlYWRPbmx5KSB7Ci0gICAg
ICAgIGlmIChtb2RlLmVsZWN0cmljQ2hhcnMuaW5kZXhPZihjaCkgPiAtMSkKLSAgICAgICAgICBz
ZXRUaW1lb3V0KG9wZXJhdGlvbihmdW5jdGlvbigpIHtpbmRlbnRMaW5lKHNlbC50by5saW5lLCAi
c21hcnQiKTt9KSwgNzUpOwotICAgICAgfQotICAgICAgaWYgKGhhbmRsZUNoYXJCaW5kaW5nKGUs
IGNoKSkgcmV0dXJuOwotICAgICAgZmFzdFBvbGwoKTsKLSAgICB9Ci0gICAgZnVuY3Rpb24gb25L
ZXlVcChlKSB7Ci0gICAgICBpZiAob3B0aW9ucy5vbktleUV2ZW50ICYmIG9wdGlvbnMub25LZXlF
dmVudChpbnN0YW5jZSwgYWRkU3RvcChlKSkpIHJldHVybjsKLSAgICAgIGlmIChlX3Byb3AoZSwg
ImtleUNvZGUiKSA9PSAxNikgc2hpZnRTZWxlY3RpbmcgPSBudWxsOwotICAgIH0KLQotICAgIGZ1
bmN0aW9uIG9uRm9jdXMoKSB7Ci0gICAgICBpZiAob3B0aW9ucy5yZWFkT25seSA9PSAibm9jdXJz
b3IiKSByZXR1cm47Ci0gICAgICBpZiAoIWZvY3VzZWQpIHsKLSAgICAgICAgaWYgKG9wdGlvbnMu
b25Gb2N1cykgb3B0aW9ucy5vbkZvY3VzKGluc3RhbmNlKTsKLSAgICAgICAgZm9jdXNlZCA9IHRy
dWU7Ci0gICAgICAgIGlmIChzY3JvbGxlci5jbGFzc05hbWUuc2VhcmNoKC9cYkNvZGVNaXJyb3It
Zm9jdXNlZFxiLykgPT0gLTEpCi0gICAgICAgICAgc2Nyb2xsZXIuY2xhc3NOYW1lICs9ICIgQ29k
ZU1pcnJvci1mb2N1c2VkIjsKLSAgICAgICAgaWYgKCFsZWF2ZUlucHV0QWxvbmUpIHJlc2V0SW5w
dXQodHJ1ZSk7Ci0gICAgICB9Ci0gICAgICBzbG93UG9sbCgpOwotICAgICAgcmVzdGFydEJsaW5r
KCk7Ci0gICAgfQotICAgIGZ1bmN0aW9uIG9uQmx1cigpIHsKLSAgICAgIGlmIChmb2N1c2VkKSB7
Ci0gICAgICAgIGlmIChvcHRpb25zLm9uQmx1cikgb3B0aW9ucy5vbkJsdXIoaW5zdGFuY2UpOwot
ICAgICAgICBmb2N1c2VkID0gZmFsc2U7Ci0gICAgICAgIGlmIChicmFja2V0SGlnaGxpZ2h0ZWQp
Ci0gICAgICAgICAgb3BlcmF0aW9uKGZ1bmN0aW9uKCl7Ci0gICAgICAgICAgICBpZiAoYnJhY2tl
dEhpZ2hsaWdodGVkKSB7IGJyYWNrZXRIaWdobGlnaHRlZCgpOyBicmFja2V0SGlnaGxpZ2h0ZWQg
PSBudWxsOyB9Ci0gICAgICAgICAgfSkoKTsKLSAgICAgICAgc2Nyb2xsZXIuY2xhc3NOYW1lID0g
c2Nyb2xsZXIuY2xhc3NOYW1lLnJlcGxhY2UoIiBDb2RlTWlycm9yLWZvY3VzZWQiLCAiIik7Ci0g
ICAgICB9Ci0gICAgICBjbGVhckludGVydmFsKGJsaW5rZXIpOwotICAgICAgc2V0VGltZW91dChm
dW5jdGlvbigpIHtpZiAoIWZvY3VzZWQpIHNoaWZ0U2VsZWN0aW5nID0gbnVsbDt9LCAxNTApOwot
ICAgIH0KLQotICAgIC8vIFJlcGxhY2UgdGhlIHJhbmdlIGZyb20gZnJvbSB0byB0byBieSB0aGUg
c3RyaW5ncyBpbiBuZXdUZXh0LgotICAgIC8vIEFmdGVyd2FyZHMsIHNldCB0aGUgc2VsZWN0aW9u
IHRvIHNlbEZyb20sIHNlbFRvLgotICAgIGZ1bmN0aW9uIHVwZGF0ZUxpbmVzKGZyb20sIHRvLCBu
ZXdUZXh0LCBzZWxGcm9tLCBzZWxUbykgewotICAgICAgaWYgKHN1cHByZXNzRWRpdHMpIHJldHVy
bjsKLSAgICAgIGlmIChoaXN0b3J5KSB7Ci0gICAgICAgIHZhciBvbGQgPSBbXTsKLSAgICAgICAg
ZG9jLml0ZXIoZnJvbS5saW5lLCB0by5saW5lICsgMSwgZnVuY3Rpb24obGluZSkgeyBvbGQucHVz
aChsaW5lLnRleHQpOyB9KTsKLSAgICAgICAgaGlzdG9yeS5hZGRDaGFuZ2UoZnJvbS5saW5lLCBu
ZXdUZXh0Lmxlbmd0aCwgb2xkKTsKLSAgICAgICAgd2hpbGUgKGhpc3RvcnkuZG9uZS5sZW5ndGgg
PiBvcHRpb25zLnVuZG9EZXB0aCkgaGlzdG9yeS5kb25lLnNoaWZ0KCk7Ci0gICAgICB9Ci0gICAg
ICB1cGRhdGVMaW5lc05vVW5kbyhmcm9tLCB0bywgbmV3VGV4dCwgc2VsRnJvbSwgc2VsVG8pOwot
ICAgIH0KLSAgICBmdW5jdGlvbiB1bnJlZG9IZWxwZXIoZnJvbSwgdG8pIHsKLSAgICAgIGlmICgh
ZnJvbS5sZW5ndGgpIHJldHVybjsKLSAgICAgIHZhciBzZXQgPSBmcm9tLnBvcCgpLCBvdXQgPSBb
XTsKLSAgICAgIGZvciAodmFyIGkgPSBzZXQubGVuZ3RoIC0gMTsgaSA+PSAwOyBpIC09IDEpIHsK
LSAgICAgICAgdmFyIGNoYW5nZSA9IHNldFtpXTsKLSAgICAgICAgdmFyIHJlcGxhY2VkID0gW10s
IGVuZCA9IGNoYW5nZS5zdGFydCArIGNoYW5nZS5hZGRlZDsKLSAgICAgICAgZG9jLml0ZXIoY2hh
bmdlLnN0YXJ0LCBlbmQsIGZ1bmN0aW9uKGxpbmUpIHsgcmVwbGFjZWQucHVzaChsaW5lLnRleHQp
OyB9KTsKLSAgICAgICAgb3V0LnB1c2goe3N0YXJ0OiBjaGFuZ2Uuc3RhcnQsIGFkZGVkOiBjaGFu
Z2Uub2xkLmxlbmd0aCwgb2xkOiByZXBsYWNlZH0pOwotICAgICAgICB2YXIgcG9zID0ge2xpbmU6
IGNoYW5nZS5zdGFydCArIGNoYW5nZS5vbGQubGVuZ3RoIC0gMSwKLSAgICAgICAgICAgICAgICAg
ICBjaDogZWRpdEVuZChyZXBsYWNlZFtyZXBsYWNlZC5sZW5ndGgtMV0sIGNoYW5nZS5vbGRbY2hh
bmdlLm9sZC5sZW5ndGgtMV0pfTsKLSAgICAgICAgdXBkYXRlTGluZXNOb1VuZG8oe2xpbmU6IGNo
YW5nZS5zdGFydCwgY2g6IDB9LCB7bGluZTogZW5kIC0gMSwgY2g6IGdldExpbmUoZW5kLTEpLnRl
eHQubGVuZ3RofSwgY2hhbmdlLm9sZCwgcG9zLCBwb3MpOwotICAgICAgfQotICAgICAgdXBkYXRl
SW5wdXQgPSB0cnVlOwotICAgICAgdG8ucHVzaChvdXQpOwotICAgIH0KLSAgICBmdW5jdGlvbiB1
bmRvKCkge3VucmVkb0hlbHBlcihoaXN0b3J5LmRvbmUsIGhpc3RvcnkudW5kb25lKTt9Ci0gICAg
ZnVuY3Rpb24gcmVkbygpIHt1bnJlZG9IZWxwZXIoaGlzdG9yeS51bmRvbmUsIGhpc3RvcnkuZG9u
ZSk7fQotCi0gICAgZnVuY3Rpb24gdXBkYXRlTGluZXNOb1VuZG8oZnJvbSwgdG8sIG5ld1RleHQs
IHNlbEZyb20sIHNlbFRvKSB7Ci0gICAgICBpZiAoc3VwcHJlc3NFZGl0cykgcmV0dXJuOwotICAg
ICAgdmFyIHJlY29tcHV0ZU1heExlbmd0aCA9IGZhbHNlLCBtYXhMaW5lTGVuZ3RoID0gbWF4TGlu
ZS50ZXh0Lmxlbmd0aDsKLSAgICAgIGlmICghb3B0aW9ucy5saW5lV3JhcHBpbmcpCi0gICAgICAg
IGRvYy5pdGVyKGZyb20ubGluZSwgdG8ubGluZSArIDEsIGZ1bmN0aW9uKGxpbmUpIHsKLSAgICAg
ICAgICBpZiAoIWxpbmUuaGlkZGVuICYmIGxpbmUudGV4dC5sZW5ndGggPT0gbWF4TGluZUxlbmd0
aCkge3JlY29tcHV0ZU1heExlbmd0aCA9IHRydWU7IHJldHVybiB0cnVlO30KLSAgICAgICAgfSk7
Ci0gICAgICBpZiAoZnJvbS5saW5lICE9IHRvLmxpbmUgfHwgbmV3VGV4dC5sZW5ndGggPiAxKSBn
dXR0ZXJEaXJ0eSA9IHRydWU7Ci0KLSAgICAgIHZhciBubGluZXMgPSB0by5saW5lIC0gZnJvbS5s
aW5lLCBmaXJzdExpbmUgPSBnZXRMaW5lKGZyb20ubGluZSksIGxhc3RMaW5lID0gZ2V0TGluZSh0
by5saW5lKTsKLSAgICAgIC8vIEZpcnN0IGFkanVzdCB0aGUgbGluZSBzdHJ1Y3R1cmUsIHRha2lu
ZyBzb21lIGNhcmUgdG8gbGVhdmUgaGlnaGxpZ2h0aW5nIGludGFjdC4KLSAgICAgIGlmIChmcm9t
LmNoID09IDAgJiYgdG8uY2ggPT0gMCAmJiBuZXdUZXh0W25ld1RleHQubGVuZ3RoIC0gMV0gPT0g
IiIpIHsKLSAgICAgICAgLy8gVGhpcyBpcyBhIHdob2xlLWxpbmUgcmVwbGFjZS4gVHJlYXRlZCBz
cGVjaWFsbHkgdG8gbWFrZQotICAgICAgICAvLyBzdXJlIGxpbmUgb2JqZWN0cyBtb3ZlIHRoZSB3
YXkgdGhleSBhcmUgc3VwcG9zZWQgdG8uCi0gICAgICAgIHZhciBhZGRlZCA9IFtdLCBwcmV2TGlu
ZSA9IG51bGw7Ci0gICAgICAgIGlmIChmcm9tLmxpbmUpIHsKLSAgICAgICAgICBwcmV2TGluZSA9
IGdldExpbmUoZnJvbS5saW5lIC0gMSk7Ci0gICAgICAgICAgcHJldkxpbmUuZml4TWFya0VuZHMo
bGFzdExpbmUpOwotICAgICAgICB9IGVsc2UgbGFzdExpbmUuZml4TWFya1N0YXJ0cygpOwotICAg
ICAgICBmb3IgKHZhciBpID0gMCwgZSA9IG5ld1RleHQubGVuZ3RoIC0gMTsgaSA8IGU7ICsraSkK
LSAgICAgICAgICBhZGRlZC5wdXNoKExpbmUuaW5oZXJpdE1hcmtzKG5ld1RleHRbaV0sIHByZXZM
aW5lKSk7Ci0gICAgICAgIGlmIChubGluZXMpIGRvYy5yZW1vdmUoZnJvbS5saW5lLCBubGluZXMs
IGNhbGxiYWNrcyk7Ci0gICAgICAgIGlmIChhZGRlZC5sZW5ndGgpIGRvYy5pbnNlcnQoZnJvbS5s
aW5lLCBhZGRlZCk7Ci0gICAgICB9IGVsc2UgaWYgKGZpcnN0TGluZSA9PSBsYXN0TGluZSkgewot
ICAgICAgICBpZiAobmV3VGV4dC5sZW5ndGggPT0gMSkKLSAgICAgICAgICBmaXJzdExpbmUucmVw
bGFjZShmcm9tLmNoLCB0by5jaCwgbmV3VGV4dFswXSk7Ci0gICAgICAgIGVsc2UgewotICAgICAg
ICAgIGxhc3RMaW5lID0gZmlyc3RMaW5lLnNwbGl0KHRvLmNoLCBuZXdUZXh0W25ld1RleHQubGVu
Z3RoLTFdKTsKLSAgICAgICAgICBmaXJzdExpbmUucmVwbGFjZShmcm9tLmNoLCBudWxsLCBuZXdU
ZXh0WzBdKTsKLSAgICAgICAgICBmaXJzdExpbmUuZml4TWFya0VuZHMobGFzdExpbmUpOwotICAg
ICAgICAgIHZhciBhZGRlZCA9IFtdOwotICAgICAgICAgIGZvciAodmFyIGkgPSAxLCBlID0gbmV3
VGV4dC5sZW5ndGggLSAxOyBpIDwgZTsgKytpKQotICAgICAgICAgICAgYWRkZWQucHVzaChMaW5l
LmluaGVyaXRNYXJrcyhuZXdUZXh0W2ldLCBmaXJzdExpbmUpKTsKLSAgICAgICAgICBhZGRlZC5w
dXNoKGxhc3RMaW5lKTsKLSAgICAgICAgICBkb2MuaW5zZXJ0KGZyb20ubGluZSArIDEsIGFkZGVk
KTsKKworICAgIHJlbW92ZUNoaWxkcmVuQW5kQWRkKGRpc3BsYXkuc2VsZWN0aW9uRGl2LCBmcmFn
bWVudCk7CisgICAgZGlzcGxheS5jdXJzb3Iuc3R5bGUuZGlzcGxheSA9IGRpc3BsYXkub3RoZXJD
dXJzb3Iuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKKyAgICBkaXNwbGF5LnNlbGVjdGlvbkRpdi5z
dHlsZS5kaXNwbGF5ID0gIiI7CisgICAgcmV0dXJuIGN1cnNvckNvb3JkcyhjbSwgc2VsSGVhZChj
bS52aWV3KSwgImRpdiIpOworICB9CisKKyAgLy8gQ3Vyc29yLWJsaW5raW5nCisgIGZ1bmN0aW9u
IHJlc3RhcnRCbGluayhjbSkgeworICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheTsKKyAgICBj
bGVhckludGVydmFsKGRpc3BsYXkuYmxpbmtlcik7CisgICAgdmFyIG9uID0gdHJ1ZTsKKyAgICBk
aXNwbGF5LmN1cnNvci5zdHlsZS52aXNpYmlsaXR5ID0gZGlzcGxheS5vdGhlckN1cnNvci5zdHls
ZS52aXNpYmlsaXR5ID0gIiI7CisgICAgZGlzcGxheS5ibGlua2VyID0gc2V0SW50ZXJ2YWwoZnVu
Y3Rpb24oKSB7CisgICAgICBkaXNwbGF5LmN1cnNvci5zdHlsZS52aXNpYmlsaXR5ID0gZGlzcGxh
eS5vdGhlckN1cnNvci5zdHlsZS52aXNpYmlsaXR5ID0gKG9uID0gIW9uKSA/ICIiIDogImhpZGRl
biI7CisgICAgfSwgY20ub3B0aW9ucy5jdXJzb3JCbGlua1JhdGUpOworICB9CisKKyAgLy8gSElH
SExJR0hUIFdPUktFUgorCisgIGZ1bmN0aW9uIHN0YXJ0V29ya2VyKGNtLCB0aW1lKSB7CisgICAg
aWYgKGNtLnZpZXcuZnJvbnRpZXIgPCBjbS5kaXNwbGF5LnNob3dpbmdUbykKKyAgICAgIGNtLnZp
ZXcuaGlnaGxpZ2h0LnNldCh0aW1lLCBiaW5kKGhpZ2hsaWdodFdvcmtlciwgY20pKTsKKyAgfQor
CisgIGZ1bmN0aW9uIGhpZ2hsaWdodFdvcmtlcihjbSkgeworICAgIHZhciB2aWV3ID0gY20udmll
dywgZG9jID0gdmlldy5kb2M7CisgICAgaWYgKHZpZXcuZnJvbnRpZXIgPj0gY20uZGlzcGxheS5z
aG93aW5nVG8pIHJldHVybjsKKyAgICB2YXIgZW5kID0gK25ldyBEYXRlICsgY20ub3B0aW9ucy53
b3JrVGltZTsKKyAgICB2YXIgc3RhdGUgPSBjb3B5U3RhdGUodmlldy5tb2RlLCBnZXRTdGF0ZUJl
Zm9yZShjbSwgdmlldy5mcm9udGllcikpOworICAgIHZhciBjaGFuZ2VkID0gW10sIHByZXZDaGFu
Z2U7CisgICAgZG9jLml0ZXIodmlldy5mcm9udGllciwgTWF0aC5taW4oZG9jLnNpemUsIGNtLmRp
c3BsYXkuc2hvd2luZ1RvICsgNTAwKSwgZnVuY3Rpb24obGluZSkgeworICAgICAgaWYgKHZpZXcu
ZnJvbnRpZXIgPj0gY20uZGlzcGxheS5zaG93aW5nRnJvbSkgeyAvLyBWaXNpYmxlCisgICAgICAg
IGlmIChoaWdobGlnaHRMaW5lKGNtLCBsaW5lLCBzdGF0ZSkgJiYgdmlldy5mcm9udGllciA+PSBj
bS5kaXNwbGF5LnNob3dpbmdGcm9tKSB7CisgICAgICAgICAgaWYgKHByZXZDaGFuZ2UgJiYgcHJl
dkNoYW5nZS5lbmQgPT0gdmlldy5mcm9udGllcikgcHJldkNoYW5nZS5lbmQrKzsKKyAgICAgICAg
ICBlbHNlIGNoYW5nZWQucHVzaChwcmV2Q2hhbmdlID0ge3N0YXJ0OiB2aWV3LmZyb250aWVyLCBl
bmQ6IHZpZXcuZnJvbnRpZXIgKyAxfSk7CiAgICAgICAgIH0KLSAgICAgIH0gZWxzZSBpZiAobmV3
VGV4dC5sZW5ndGggPT0gMSkgewotICAgICAgICBmaXJzdExpbmUucmVwbGFjZShmcm9tLmNoLCBu
dWxsLCBuZXdUZXh0WzBdKTsKLSAgICAgICAgbGFzdExpbmUucmVwbGFjZShudWxsLCB0by5jaCwg
IiIpOwotICAgICAgICBmaXJzdExpbmUuYXBwZW5kKGxhc3RMaW5lKTsKLSAgICAgICAgZG9jLnJl
bW92ZShmcm9tLmxpbmUgKyAxLCBubGluZXMsIGNhbGxiYWNrcyk7CisgICAgICAgIGxpbmUuc3Rh
dGVBZnRlciA9IGNvcHlTdGF0ZSh2aWV3Lm1vZGUsIHN0YXRlKTsKICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgIHZhciBhZGRlZCA9IFtdOwotICAgICAgICBmaXJzdExpbmUucmVwbGFjZShmcm9tLmNo
LCBudWxsLCBuZXdUZXh0WzBdKTsKLSAgICAgICAgbGFzdExpbmUucmVwbGFjZShudWxsLCB0by5j
aCwgbmV3VGV4dFtuZXdUZXh0Lmxlbmd0aC0xXSk7Ci0gICAgICAgIGZpcnN0TGluZS5maXhNYXJr
RW5kcyhsYXN0TGluZSk7Ci0gICAgICAgIGZvciAodmFyIGkgPSAxLCBlID0gbmV3VGV4dC5sZW5n
dGggLSAxOyBpIDwgZTsgKytpKQotICAgICAgICAgIGFkZGVkLnB1c2goTGluZS5pbmhlcml0TWFy
a3MobmV3VGV4dFtpXSwgZmlyc3RMaW5lKSk7Ci0gICAgICAgIGlmIChubGluZXMgPiAxKSBkb2Mu
cmVtb3ZlKGZyb20ubGluZSArIDEsIG5saW5lcyAtIDEsIGNhbGxiYWNrcyk7Ci0gICAgICAgIGRv
Yy5pbnNlcnQoZnJvbS5saW5lICsgMSwgYWRkZWQpOworICAgICAgICBwcm9jZXNzTGluZShjbSwg
bGluZSwgc3RhdGUpOworICAgICAgICBsaW5lLnN0YXRlQWZ0ZXIgPSB2aWV3LmZyb250aWVyICUg
NSA9PSAwID8gY29weVN0YXRlKHZpZXcubW9kZSwgc3RhdGUpIDogbnVsbDsKICAgICAgIH0KLSAg
ICAgIGlmIChvcHRpb25zLmxpbmVXcmFwcGluZykgewotICAgICAgICB2YXIgcGVyTGluZSA9IE1h
dGgubWF4KDUsIHNjcm9sbGVyLmNsaWVudFdpZHRoIC8gY2hhcldpZHRoKCkgLSAzKTsKLSAgICAg
ICAgZG9jLml0ZXIoZnJvbS5saW5lLCBmcm9tLmxpbmUgKyBuZXdUZXh0Lmxlbmd0aCwgZnVuY3Rp
b24obGluZSkgewotICAgICAgICAgIGlmIChsaW5lLmhpZGRlbikgcmV0dXJuOwotICAgICAgICAg
IHZhciBndWVzcyA9IE1hdGguY2VpbChsaW5lLnRleHQubGVuZ3RoIC8gcGVyTGluZSkgfHwgMTsK
LSAgICAgICAgICBpZiAoZ3Vlc3MgIT0gbGluZS5oZWlnaHQpIHVwZGF0ZUxpbmVIZWlnaHQobGlu
ZSwgZ3Vlc3MpOwotICAgICAgICB9KTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGRvYy5pdGVy
KGZyb20ubGluZSwgZnJvbS5saW5lICsgbmV3VGV4dC5sZW5ndGgsIGZ1bmN0aW9uKGxpbmUpIHsK
LSAgICAgICAgICB2YXIgbCA9IGxpbmUudGV4dDsKLSAgICAgICAgICBpZiAoIWxpbmUuaGlkZGVu
ICYmIGwubGVuZ3RoID4gbWF4TGluZUxlbmd0aCkgewotICAgICAgICAgICAgbWF4TGluZSA9IGxp
bmU7IG1heExpbmVMZW5ndGggPSBsLmxlbmd0aDsgbWF4TGluZUNoYW5nZWQgPSB0cnVlOwotICAg
ICAgICAgICAgcmVjb21wdXRlTWF4TGVuZ3RoID0gZmFsc2U7Ci0gICAgICAgICAgfQotICAgICAg
ICB9KTsKLSAgICAgICAgaWYgKHJlY29tcHV0ZU1heExlbmd0aCkgdXBkYXRlTWF4TGluZSA9IHRy
dWU7Ci0gICAgICB9Ci0KLSAgICAgIC8vIEFkZCB0aGVzZSBsaW5lcyB0byB0aGUgd29yayBhcnJh
eSwgc28gdGhhdCB0aGV5IHdpbGwgYmUKLSAgICAgIC8vIGhpZ2hsaWdodGVkLiBBZGp1c3Qgd29y
ayBsaW5lcyBpZiBsaW5lcyB3ZXJlIGFkZGVkL3JlbW92ZWQuCi0gICAgICB2YXIgbmV3V29yayA9
IFtdLCBsZW5kaWZmID0gbmV3VGV4dC5sZW5ndGggLSBubGluZXMgLSAxOwotICAgICAgZm9yICh2
YXIgaSA9IDAsIGwgPSB3b3JrLmxlbmd0aDsgaSA8IGw7ICsraSkgewotICAgICAgICB2YXIgdGFz
ayA9IHdvcmtbaV07Ci0gICAgICAgIGlmICh0YXNrIDwgZnJvbS5saW5lKSBuZXdXb3JrLnB1c2go
dGFzayk7Ci0gICAgICAgIGVsc2UgaWYgKHRhc2sgPiB0by5saW5lKSBuZXdXb3JrLnB1c2godGFz
ayArIGxlbmRpZmYpOwotICAgICAgfQotICAgICAgdmFyIGhsRW5kID0gZnJvbS5saW5lICsgTWF0
aC5taW4obmV3VGV4dC5sZW5ndGgsIDUwMCk7Ci0gICAgICBoaWdobGlnaHRMaW5lcyhmcm9tLmxp
bmUsIGhsRW5kKTsKLSAgICAgIG5ld1dvcmsucHVzaChobEVuZCk7Ci0gICAgICB3b3JrID0gbmV3
V29yazsKLSAgICAgIHN0YXJ0V29ya2VyKDEwMCk7Ci0gICAgICAvLyBSZW1lbWJlciB0aGF0IHRo
ZXNlIGxpbmVzIGNoYW5nZWQsIGZvciB1cGRhdGluZyB0aGUgZGlzcGxheQotICAgICAgY2hhbmdl
cy5wdXNoKHtmcm9tOiBmcm9tLmxpbmUsIHRvOiB0by5saW5lICsgMSwgZGlmZjogbGVuZGlmZn0p
OwotICAgICAgdmFyIGNoYW5nZU9iaiA9IHtmcm9tOiBmcm9tLCB0bzogdG8sIHRleHQ6IG5ld1Rl
eHR9OwotICAgICAgaWYgKHRleHRDaGFuZ2VkKSB7Ci0gICAgICAgIGZvciAodmFyIGN1ciA9IHRl
eHRDaGFuZ2VkOyBjdXIubmV4dDsgY3VyID0gY3VyLm5leHQpIHt9Ci0gICAgICAgIGN1ci5uZXh0
ID0gY2hhbmdlT2JqOwotICAgICAgfSBlbHNlIHRleHRDaGFuZ2VkID0gY2hhbmdlT2JqOworICAg
ICAgKyt2aWV3LmZyb250aWVyOworICAgICAgaWYgKCtuZXcgRGF0ZSA+IGVuZCkgeworICAgICAg
ICBzdGFydFdvcmtlcihjbSwgY20ub3B0aW9ucy53b3JrRGVsYXkpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgIH0KKyAgICB9KTsKKyAgICBpZiAoY2hhbmdlZC5sZW5ndGgpCisgICAgICBv
cGVyYXRpb24oY20sIGZ1bmN0aW9uKCkgeworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNo
YW5nZWQubGVuZ3RoOyArK2kpCisgICAgICAgICAgcmVnQ2hhbmdlKHRoaXMsIGNoYW5nZWRbaV0u
c3RhcnQsIGNoYW5nZWRbaV0uZW5kKTsKKyAgICAgIH0pKCk7CisgIH0KIAotICAgICAgLy8gVXBk
YXRlIHRoZSBzZWxlY3Rpb24KLSAgICAgIGZ1bmN0aW9uIHVwZGF0ZUxpbmUobikge3JldHVybiBu
IDw9IE1hdGgubWluKHRvLmxpbmUsIHRvLmxpbmUgKyBsZW5kaWZmKSA/IG4gOiBuICsgbGVuZGlm
Zjt9Ci0gICAgICBzZXRTZWxlY3Rpb24oY2xpcFBvcyhzZWxGcm9tKSwgY2xpcFBvcyhzZWxUbyks
Ci0gICAgICAgICAgICAgICAgICAgdXBkYXRlTGluZShzZWwuZnJvbS5saW5lKSwgdXBkYXRlTGlu
ZShzZWwudG8ubGluZSkpOworICAvLyBGaW5kcyB0aGUgbGluZSB0byBzdGFydCB3aXRoIHdoZW4g
c3RhcnRpbmcgYSBwYXJzZS4gVHJpZXMgdG8KKyAgLy8gZmluZCBhIGxpbmUgd2l0aCBhIHN0YXRl
QWZ0ZXIsIHNvIHRoYXQgaXQgY2FuIHN0YXJ0IHdpdGggYQorICAvLyB2YWxpZCBzdGF0ZS4gSWYg
dGhhdCBmYWlscywgaXQgcmV0dXJucyB0aGUgbGluZSB3aXRoIHRoZQorICAvLyBzbWFsbGVzdCBp
bmRlbnRhdGlvbiwgd2hpY2ggdGVuZHMgdG8gbmVlZCB0aGUgbGVhc3QgY29udGV4dCB0bworICAv
LyBwYXJzZSBjb3JyZWN0bHkuCisgIGZ1bmN0aW9uIGZpbmRTdGFydExpbmUoY20sIG4pIHsKKyAg
ICB2YXIgbWluaW5kZW50LCBtaW5saW5lLCBkb2MgPSBjbS52aWV3LmRvYzsKKyAgICBmb3IgKHZh
ciBzZWFyY2ggPSBuLCBsaW0gPSBuIC0gMTAwOyBzZWFyY2ggPiBsaW07IC0tc2VhcmNoKSB7Cisg
ICAgICBpZiAoc2VhcmNoID09IDApIHJldHVybiAwOworICAgICAgdmFyIGxpbmUgPSBnZXRMaW5l
KGRvYywgc2VhcmNoLTEpOworICAgICAgaWYgKGxpbmUuc3RhdGVBZnRlcikgcmV0dXJuIHNlYXJj
aDsKKyAgICAgIHZhciBpbmRlbnRlZCA9IGNvdW50Q29sdW1uKGxpbmUudGV4dCwgbnVsbCwgY20u
b3B0aW9ucy50YWJTaXplKTsKKyAgICAgIGlmIChtaW5saW5lID09IG51bGwgfHwgbWluaW5kZW50
ID4gaW5kZW50ZWQpIHsKKyAgICAgICAgbWlubGluZSA9IHNlYXJjaCAtIDE7CisgICAgICAgIG1p
bmluZGVudCA9IGluZGVudGVkOworICAgICAgfQogICAgIH0KKyAgICByZXR1cm4gbWlubGluZTsK
KyAgfQogCi0gICAgZnVuY3Rpb24gbmVlZHNTY3JvbGxiYXIoKSB7Ci0gICAgICB2YXIgcmVhbEhl
aWdodCA9IGRvYy5oZWlnaHQgKiB0ZXh0SGVpZ2h0KCkgKyAyICogcGFkZGluZ1RvcCgpOwotICAg
ICAgcmV0dXJuIHJlYWxIZWlnaHQgLSAxID4gc2Nyb2xsZXIub2Zmc2V0SGVpZ2h0ID8gcmVhbEhl
aWdodCA6IGZhbHNlOwotICAgIH0KKyAgZnVuY3Rpb24gZ2V0U3RhdGVCZWZvcmUoY20sIG4pIHsK
KyAgICB2YXIgdmlldyA9IGNtLnZpZXc7CisgICAgdmFyIHBvcyA9IGZpbmRTdGFydExpbmUoY20s
IG4pLCBzdGF0ZSA9IHBvcyAmJiBnZXRMaW5lKHZpZXcuZG9jLCBwb3MtMSkuc3RhdGVBZnRlcjsK
KyAgICBpZiAoIXN0YXRlKSBzdGF0ZSA9IHN0YXJ0U3RhdGUodmlldy5tb2RlKTsKKyAgICBlbHNl
IHN0YXRlID0gY29weVN0YXRlKHZpZXcubW9kZSwgc3RhdGUpOworICAgIHZpZXcuZG9jLml0ZXIo
cG9zLCBuLCBmdW5jdGlvbihsaW5lKSB7CisgICAgICBwcm9jZXNzTGluZShjbSwgbGluZSwgc3Rh
dGUpOworICAgICAgdmFyIHNhdmUgPSBwb3MgPT0gbiAtIDEgfHwgcG9zICUgNSA9PSAwIHx8IHBv
cyA+PSB2aWV3LnNob3dpbmdGcm9tICYmIHBvcyA8IHZpZXcuc2hvd2luZ1RvOworICAgICAgbGlu
ZS5zdGF0ZUFmdGVyID0gc2F2ZSA/IGNvcHlTdGF0ZSh2aWV3Lm1vZGUsIHN0YXRlKSA6IG51bGw7
CisgICAgICArK3BvczsKKyAgICB9KTsKKyAgICByZXR1cm4gc3RhdGU7CisgIH0KIAotICAgIGZ1
bmN0aW9uIHVwZGF0ZVZlcnRpY2FsU2Nyb2xsKHNjcm9sbFRvcCkgewotICAgICAgdmFyIHNjcm9s
bEhlaWdodCA9IG5lZWRzU2Nyb2xsYmFyKCk7Ci0gICAgICBzY3JvbGxiYXIuc3R5bGUuZGlzcGxh
eSA9IHNjcm9sbEhlaWdodCA/ICJibG9jayIgOiAibm9uZSI7Ci0gICAgICBpZiAoc2Nyb2xsSGVp
Z2h0KSB7Ci0gICAgICAgIHNjcm9sbGJhcklubmVyLnN0eWxlLmhlaWdodCA9IHNpemVyLnN0eWxl
Lm1pbkhlaWdodCA9IHNjcm9sbEhlaWdodCArICJweCI7Ci0gICAgICAgIHNjcm9sbGJhci5zdHls
ZS5oZWlnaHQgPSBzY3JvbGxlci5jbGllbnRIZWlnaHQgKyAicHgiOwotICAgICAgICBpZiAoc2Ny
b2xsVG9wICE9IG51bGwpIHNjcm9sbGJhci5zY3JvbGxUb3AgPSBzY3JvbGxlci5zY3JvbGxUb3Ag
PSBzY3JvbGxUb3A7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBzaXplci5zdHlsZS5taW5IZWln
aHQgPSAiIjsKLSAgICAgIH0KLSAgICAgIC8vIFBvc2l0aW9uIHRoZSBtb3ZlciBkaXYgdG8gYWxp
Z24gd2l0aCB0aGUgY3VycmVudCB2aXJ0dWFsIHNjcm9sbCBwb3NpdGlvbgotICAgICAgbW92ZXIu
c3R5bGUudG9wID0gZGlzcGxheU9mZnNldCAqIHRleHRIZWlnaHQoKSArICJweCI7Ci0gICAgfQor
ICAvLyBQT1NJVElPTiBNRUFTVVJFTUVOVAorICAKKyAgZnVuY3Rpb24gcGFkZGluZ1RvcChkaXNw
bGF5KSB7cmV0dXJuIGRpc3BsYXkubGluZVNwYWNlLm9mZnNldFRvcDt9CisgIGZ1bmN0aW9uIHBh
ZGRpbmdMZWZ0KGRpc3BsYXkpIHsKKyAgICB2YXIgZSA9IHJlbW92ZUNoaWxkcmVuQW5kQWRkKGRp
c3BsYXkubWVhc3VyZSwgZWx0KCJwcmUiKSkuYXBwZW5kQ2hpbGQoZWx0KCJzcGFuIiwgIngiKSk7
CisgICAgcmV0dXJuIGUub2Zmc2V0TGVmdDsKKyAgfQogCi0gICAgLy8gT24gTWFjIE9TIFggTGlv
biBhbmQgdXAsIGRldGVjdCB3aGV0aGVyIHRoZSBtb3VzZSBpcyBwbHVnZ2VkIGluIGJ5IG1lYXN1
cmluZwotICAgIC8vIHRoZSB3aWR0aCBvZiBhIGRpdiB3aXRoIGEgc2Nyb2xsYmFyIGluIGl0LiBJ
ZiB0aGUgd2lkdGggaXMgPD0gMSwgdGhlbgotICAgIC8vIHRoZSBtb3VzZSBpc24ndCBwbHVnZ2Vk
IGluIGFuZCBzY3JvbGxiYXJzIHNob3VsZCBvdmVybGFwIHRoZSBjb250ZW50LgotICAgIGZ1bmN0
aW9uIG92ZXJsYXBTY3JvbGxiYXJzKCkgewotICAgICAgdmFyIHRtcFNiSW5uZXIgPSBlbHQoImRp
diIsIG51bGwsICJDb2RlTWlycm9yLXNjcm9sbGJhci1pbm5lciIsICJoZWlnaHQ6IDIwMHB4Iik7
Ci0gICAgICB2YXIgdG1wU2IgPSBlbHQoImRpdiIsIFt0bXBTYklubmVyXSwgIkNvZGVNaXJyb3It
c2Nyb2xsYmFyIiwgInBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogLTk5OTlweDsgaGVpZ2h0OiAx
MDBweDsiKTsKLSAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodG1wU2IpOwotICAgICAg
dmFyIHJlc3VsdCA9ICh0bXBTYi5vZmZzZXRXaWR0aCA8PSAxKTsKLSAgICAgIGRvY3VtZW50LmJv
ZHkucmVtb3ZlQ2hpbGQodG1wU2IpOwotICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgZnVuY3Rpb24g
bWVhc3VyZUNoYXIoY20sIGxpbmUsIGNoLCBkYXRhKSB7CisgICAgdmFyIGRhdGEgPSBkYXRhIHx8
IG1lYXN1cmVMaW5lKGNtLCBsaW5lKTsKKyAgICB2YXIgZGlyID0gLTEsIGxlbiA9IGxpbmUudGV4
dC5sZW5ndGg7CisgICAgZm9yICh2YXIgcG9zID0gY2g7OyBwb3MgKz0gZGlyKSB7CisgICAgICB2
YXIgciA9IGRhdGFbcG9zXTsKKyAgICAgIGlmIChyKSBicmVhazsKKyAgICAgIGlmIChkaXIgPCAw
ICYmIHBvcyA9PSAwKSBkaXIgPSAxOwogICAgIH0KKyAgICByZXR1cm4ge2xlZnQ6IHBvcyA8IGNo
ID8gci5yaWdodCA6IHIubGVmdCwKKyAgICAgICAgICAgIHJpZ2h0OiBwb3MgPiBjaCA/IHIubGVm
dCA6IHIucmlnaHQsCisgICAgICAgICAgICB0b3A6IHIudG9wLCBib3R0b206IHIuYm90dG9tfTsK
KyAgfQogCi0gICAgZnVuY3Rpb24gY29tcHV0ZU1heExlbmd0aCgpIHsKLSAgICAgIG1heExpbmUg
PSBnZXRMaW5lKDApOyBtYXhMaW5lQ2hhbmdlZCA9IHRydWU7Ci0gICAgICB2YXIgbWF4TGluZUxl
bmd0aCA9IG1heExpbmUudGV4dC5sZW5ndGg7Ci0gICAgICBkb2MuaXRlcigxLCBkb2Muc2l6ZSwg
ZnVuY3Rpb24obGluZSkgewotICAgICAgICB2YXIgbCA9IGxpbmUudGV4dDsKLSAgICAgICAgaWYg
KCFsaW5lLmhpZGRlbiAmJiBsLmxlbmd0aCA+IG1heExpbmVMZW5ndGgpIHsKLSAgICAgICAgICBt
YXhMaW5lTGVuZ3RoID0gbC5sZW5ndGg7IG1heExpbmUgPSBsaW5lOwotICAgICAgICB9Ci0gICAg
ICB9KTsKLSAgICAgIHVwZGF0ZU1heExpbmUgPSBmYWxzZTsKKyAgZnVuY3Rpb24gbWVhc3VyZUxp
bmUoY20sIGxpbmUpIHsKKyAgICAvLyBGaXJzdCBsb29rIGluIHRoZSBjYWNoZQorICAgIHZhciBk
aXNwbGF5ID0gY20uZGlzcGxheSwgY2FjaGUgPSBjbS5kaXNwbGF5Lm1lYXN1cmVMaW5lQ2FjaGU7
CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYWNoZS5sZW5ndGg7ICsraSkgeworICAgICAgdmFy
IG1lbW8gPSBjYWNoZVtpXTsKKyAgICAgIGlmIChtZW1vLnRleHQgPT0gbGluZS50ZXh0ICYmIG1l
bW8ubWFya2VkU3BhbnMgPT0gbGluZS5tYXJrZWRTcGFucyAmJgorICAgICAgICAgIGRpc3BsYXku
c2Nyb2xsZXIuY2xpZW50V2lkdGggPT0gbWVtby53aWR0aCkKKyAgICAgICAgcmV0dXJuIG1lbW8u
bWVhc3VyZTsKICAgICB9CisgICAgCisgICAgdmFyIG1lYXN1cmUgPSBtZWFzdXJlTGluZUlubmVy
KGNtLCBsaW5lKTsKKyAgICAvLyBTdG9yZSByZXN1bHQgaW4gdGhlIGNhY2hlCisgICAgdmFyIG1l
bW8gPSB7dGV4dDogbGluZS50ZXh0LCB3aWR0aDogZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0
aCwKKyAgICAgICAgICAgICAgICBtYXJrZWRTcGFuczogbGluZS5tYXJrZWRTcGFucywgbWVhc3Vy
ZTogbWVhc3VyZX07CisgICAgaWYgKGNhY2hlLmxlbmd0aCA9PSAxNikgY2FjaGVbKytjYWNoZS5w
b3MgJSAxNl0gPSBtZW1vOworICAgIGVsc2UgY2FjaGUucHVzaChtZW1vKTsKKyAgICByZXR1cm4g
bWVhc3VyZTsKKyAgfQogCi0gICAgZnVuY3Rpb24gcmVwbGFjZVJhbmdlKGNvZGUsIGZyb20sIHRv
KSB7Ci0gICAgICBmcm9tID0gY2xpcFBvcyhmcm9tKTsKLSAgICAgIGlmICghdG8pIHRvID0gZnJv
bTsgZWxzZSB0byA9IGNsaXBQb3ModG8pOwotICAgICAgY29kZSA9IHNwbGl0TGluZXMoY29kZSk7
Ci0gICAgICBmdW5jdGlvbiBhZGp1c3RQb3MocG9zKSB7Ci0gICAgICAgIGlmIChwb3NMZXNzKHBv
cywgZnJvbSkpIHJldHVybiBwb3M7Ci0gICAgICAgIGlmICghcG9zTGVzcyh0bywgcG9zKSkgcmV0
dXJuIGVuZDsKLSAgICAgICAgdmFyIGxpbmUgPSBwb3MubGluZSArIGNvZGUubGVuZ3RoIC0gKHRv
LmxpbmUgLSBmcm9tLmxpbmUpIC0gMTsKLSAgICAgICAgdmFyIGNoID0gcG9zLmNoOwotICAgICAg
ICBpZiAocG9zLmxpbmUgPT0gdG8ubGluZSkKLSAgICAgICAgICBjaCArPSBjb2RlW2NvZGUubGVu
Z3RoLTFdLmxlbmd0aCAtICh0by5jaCAtICh0by5saW5lID09IGZyb20ubGluZSA/IGZyb20uY2gg
OiAwKSk7Ci0gICAgICAgIHJldHVybiB7bGluZTogbGluZSwgY2g6IGNofTsKKyAgZnVuY3Rpb24g
bWVhc3VyZUxpbmVJbm5lcihjbSwgbGluZSkgeworICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxh
eSwgbWVhc3VyZSA9IGVtcHR5QXJyYXkobGluZS50ZXh0Lmxlbmd0aCk7CisgICAgdmFyIHByZSA9
IGxpbmVDb250ZW50KGNtLCBsaW5lLCBtZWFzdXJlKTsKKyAgICByZW1vdmVDaGlsZHJlbkFuZEFk
ZChkaXNwbGF5Lm1lYXN1cmUsIHByZSk7CisKKyAgICB2YXIgb3V0ZXIgPSBkaXNwbGF5LmxpbmVE
aXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CisgICAgdmFyIHZyYW5nZXMgPSBbXSwgZGF0YSA9
IGVtcHR5QXJyYXkobGluZS50ZXh0Lmxlbmd0aCksIG1heEJvdCA9IHByZS5vZmZzZXRIZWlnaHQ7
CisgICAgZm9yICh2YXIgaSA9IDAsIGVsdDsgaSA8IG1lYXN1cmUubGVuZ3RoOyArK2kpIGlmIChl
bHQgPSBtZWFzdXJlW2ldKSB7CisgICAgICB2YXIgc2l6ZSA9IG1lYXN1cmVbaV0uZ2V0Qm91bmRp
bmdDbGllbnRSZWN0KCk7CisgICAgICB2YXIgdG9wID0gTWF0aC5tYXgoMCwgc2l6ZS50b3AgLSBv
dXRlci50b3ApLCBib3QgPSBNYXRoLm1pbihzaXplLmJvdHRvbSAtIG91dGVyLnRvcCwgbWF4Qm90
KTsKKyAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdnJhbmdlcy5sZW5ndGg7IGogKz0gMikgewor
ICAgICAgICB2YXIgcnRvcCA9IHZyYW5nZXNbal0sIHJib3QgPSB2cmFuZ2VzW2orMV07CisgICAg
ICAgIGlmIChydG9wID4gYm90IHx8IHJib3QgPCB0b3ApIGNvbnRpbnVlOworICAgICAgICBpZiAo
cnRvcCA8PSB0b3AgJiYgcmJvdCA+PSBib3QgfHwKKyAgICAgICAgICAgIHRvcCA8PSBydG9wICYm
IGJvdCA+PSByYm90IHx8CisgICAgICAgICAgICBNYXRoLm1pbihib3QsIHJib3QpIC0gTWF0aC5t
YXgodG9wLCBydG9wKSA+PSAoYm90IC0gdG9wKSA+PiAxKSB7CisgICAgICAgICAgdnJhbmdlc1tq
XSA9IE1hdGgubWluKHRvcCwgcnRvcCk7CisgICAgICAgICAgdnJhbmdlc1tqKzFdID0gTWF0aC5t
YXgoYm90LCByYm90KTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgfQotICAg
ICAgdmFyIGVuZDsKLSAgICAgIHJlcGxhY2VSYW5nZTEoY29kZSwgZnJvbSwgdG8sIGZ1bmN0aW9u
KGVuZDEpIHsKLSAgICAgICAgZW5kID0gZW5kMTsKLSAgICAgICAgcmV0dXJuIHtmcm9tOiBhZGp1
c3RQb3Moc2VsLmZyb20pLCB0bzogYWRqdXN0UG9zKHNlbC50byl9OwotICAgICAgfSk7Ci0gICAg
ICByZXR1cm4gZW5kOwotICAgIH0KLSAgICBmdW5jdGlvbiByZXBsYWNlU2VsZWN0aW9uKGNvZGUs
IGNvbGxhcHNlKSB7Ci0gICAgICByZXBsYWNlUmFuZ2UxKHNwbGl0TGluZXMoY29kZSksIHNlbC5m
cm9tLCBzZWwudG8sIGZ1bmN0aW9uKGVuZCkgewotICAgICAgICBpZiAoY29sbGFwc2UgPT0gImVu
ZCIpIHJldHVybiB7ZnJvbTogZW5kLCB0bzogZW5kfTsKLSAgICAgICAgZWxzZSBpZiAoY29sbGFw
c2UgPT0gInN0YXJ0IikgcmV0dXJuIHtmcm9tOiBzZWwuZnJvbSwgdG86IHNlbC5mcm9tfTsKLSAg
ICAgICAgZWxzZSByZXR1cm4ge2Zyb206IHNlbC5mcm9tLCB0bzogZW5kfTsKLSAgICAgIH0pOwor
ICAgICAgaWYgKGogPT0gdnJhbmdlcy5sZW5ndGgpIHZyYW5nZXMucHVzaCh0b3AsIGJvdCk7Cisg
ICAgICBkYXRhW2ldID0ge2xlZnQ6IHNpemUubGVmdCAtIG91dGVyLmxlZnQsIHJpZ2h0OiBzaXpl
LnJpZ2h0IC0gb3V0ZXIubGVmdCwgdG9wOiBqfTsKICAgICB9Ci0gICAgZnVuY3Rpb24gcmVwbGFj
ZVJhbmdlMShjb2RlLCBmcm9tLCB0bywgY29tcHV0ZVNlbCkgewotICAgICAgdmFyIGVuZGNoID0g
Y29kZS5sZW5ndGggPT0gMSA/IGNvZGVbMF0ubGVuZ3RoICsgZnJvbS5jaCA6IGNvZGVbY29kZS5s
ZW5ndGgtMV0ubGVuZ3RoOwotICAgICAgdmFyIG5ld1NlbCA9IGNvbXB1dGVTZWwoe2xpbmU6IGZy
b20ubGluZSArIGNvZGUubGVuZ3RoIC0gMSwgY2g6IGVuZGNofSk7Ci0gICAgICB1cGRhdGVMaW5l
cyhmcm9tLCB0bywgY29kZSwgbmV3U2VsLmZyb20sIG5ld1NlbC50byk7CisgICAgZm9yICh2YXIg
aSA9IDAsIGVsdDsgaSA8IGRhdGEubGVuZ3RoOyArK2kpIGlmIChlbHQgPSBkYXRhW2ldKSB7Cisg
ICAgICB2YXIgdnIgPSBlbHQudG9wOworICAgICAgZWx0LnRvcCA9IHZyYW5nZXNbdnJdOyBlbHQu
Ym90dG9tID0gdnJhbmdlc1t2cisxXTsKICAgICB9CisgICAgcmV0dXJuIGRhdGE7CisgIH0KIAot
ICAgIGZ1bmN0aW9uIGdldFJhbmdlKGZyb20sIHRvLCBsaW5lU2VwKSB7Ci0gICAgICB2YXIgbDEg
PSBmcm9tLmxpbmUsIGwyID0gdG8ubGluZTsKLSAgICAgIGlmIChsMSA9PSBsMikgcmV0dXJuIGdl
dExpbmUobDEpLnRleHQuc2xpY2UoZnJvbS5jaCwgdG8uY2gpOwotICAgICAgdmFyIGNvZGUgPSBb
Z2V0TGluZShsMSkudGV4dC5zbGljZShmcm9tLmNoKV07Ci0gICAgICBkb2MuaXRlcihsMSArIDEs
IGwyLCBmdW5jdGlvbihsaW5lKSB7IGNvZGUucHVzaChsaW5lLnRleHQpOyB9KTsKLSAgICAgIGNv
ZGUucHVzaChnZXRMaW5lKGwyKS50ZXh0LnNsaWNlKDAsIHRvLmNoKSk7Ci0gICAgICByZXR1cm4g
Y29kZS5qb2luKGxpbmVTZXAgfHwgIlxuIik7CisgIC8vIENvbnRleHQgaXMgb25lIG9mICJsaW5l
IiwgImRpdiIgKGRpc3BsYXkubGluZURpdiksICJsb2NhbCIvbnVsbCAoZWRpdG9yKSwgb3IgInBh
Z2UiCisgIGZ1bmN0aW9uIGludG9Db29yZFN5c3RlbShjbSwgbGluZU9iaiwgcG9zLCByZWN0LCBj
b250ZXh0KSB7CisgICAgaWYgKGxpbmVPYmoud2lkZ2V0cykgZm9yICh2YXIgaSA9IDA7IGkgPCBs
aW5lT2JqLndpZGdldHMubGVuZ3RoOyArK2kpIGlmIChsaW5lT2JqLndpZGdldHNbaV0uYWJvdmUp
IHsKKyAgICAgIHZhciBzaXplID0gbGluZU9iai53aWRnZXRzW2ldLm5vZGUub2Zmc2V0SGVpZ2h0
OworICAgICAgcmVjdC50b3AgKz0gc2l6ZTsgcmVjdC5ib3R0b20gKz0gc2l6ZTsKICAgICB9Ci0g
ICAgZnVuY3Rpb24gZ2V0U2VsZWN0aW9uKGxpbmVTZXApIHsKLSAgICAgIHJldHVybiBnZXRSYW5n
ZShzZWwuZnJvbSwgc2VsLnRvLCBsaW5lU2VwKTsKKyAgICBpZiAoY29udGV4dCA9PSAibGluZSIp
IHJldHVybiByZWN0OworICAgIGlmICghY29udGV4dCkgY29udGV4dCA9ICJsb2NhbCI7CisgICAg
dmFyIHlPZmYgPSBoZWlnaHRBdExpbmUoY20sIGxpbmVPYmopOworICAgIGlmIChjb250ZXh0ICE9
ICJsb2NhbCIpIHlPZmYgLT0gY20uZGlzcGxheS52aWV3T2Zmc2V0OworICAgIGlmIChjb250ZXh0
ID09ICJwYWdlIikgeworICAgICAgdmFyIGxPZmYgPSBjbS5kaXNwbGF5LmxpbmVTcGFjZS5nZXRC
b3VuZGluZ0NsaWVudFJlY3QoKTsKKyAgICAgIHlPZmYgKz0gbE9mZi50b3AgKyAod2luZG93LnBh
Z2VZT2Zmc2V0IHx8IChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgfHwgZG9jdW1lbnQuYm9keSku
c2Nyb2xsVG9wKTsKKyAgICAgIHZhciB4T2ZmID0gbE9mZi5sZWZ0ICsgKHdpbmRvdy5wYWdlWE9m
ZnNldCB8fCAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IHx8IGRvY3VtZW50LmJvZHkpLnNjcm9s
bExlZnQpOworICAgICAgcmVjdC5sZWZ0ICs9IHhPZmY7IHJlY3QucmlnaHQgKz0geE9mZjsKICAg
ICB9CisgICAgcmVjdC50b3AgKz0geU9mZjsgcmVjdC5ib3R0b20gKz0geU9mZjsKKyAgICByZXR1
cm4gcmVjdDsKKyAgfQogCi0gICAgZnVuY3Rpb24gc2xvd1BvbGwoKSB7Ci0gICAgICBpZiAocG9s
bGluZ0Zhc3QpIHJldHVybjsKLSAgICAgIHBvbGwuc2V0KG9wdGlvbnMucG9sbEludGVydmFsLCBm
dW5jdGlvbigpIHsKLSAgICAgICAgc3RhcnRPcGVyYXRpb24oKTsKLSAgICAgICAgcmVhZElucHV0
KCk7Ci0gICAgICAgIGlmIChmb2N1c2VkKSBzbG93UG9sbCgpOwotICAgICAgICBlbmRPcGVyYXRp
b24oKTsKLSAgICAgIH0pOwotICAgIH0KLSAgICBmdW5jdGlvbiBmYXN0UG9sbCgpIHsKLSAgICAg
IHZhciBtaXNzZWQgPSBmYWxzZTsKLSAgICAgIHBvbGxpbmdGYXN0ID0gdHJ1ZTsKLSAgICAgIGZ1
bmN0aW9uIHAoKSB7Ci0gICAgICAgIHN0YXJ0T3BlcmF0aW9uKCk7Ci0gICAgICAgIHZhciBjaGFu
Z2VkID0gcmVhZElucHV0KCk7Ci0gICAgICAgIGlmICghY2hhbmdlZCAmJiAhbWlzc2VkKSB7bWlz
c2VkID0gdHJ1ZTsgcG9sbC5zZXQoNjAsIHApO30KLSAgICAgICAgZWxzZSB7cG9sbGluZ0Zhc3Qg
PSBmYWxzZTsgc2xvd1BvbGwoKTt9Ci0gICAgICAgIGVuZE9wZXJhdGlvbigpOwotICAgICAgfQot
ICAgICAgcG9sbC5zZXQoMjAsIHApOwotICAgIH0KLQotICAgIC8vIFByZXZpbnB1dCBpcyBhIGhh
Y2sgdG8gd29yayB3aXRoIElNRS4gSWYgd2UgcmVzZXQgdGhlIHRleHRhcmVhCi0gICAgLy8gb24g
ZXZlcnkgY2hhbmdlLCB0aGF0IGJyZWFrcyBJTUUuIFNvIHdlIGxvb2sgZm9yIGNoYW5nZXMKLSAg
ICAvLyBjb21wYXJlZCB0byB0aGUgcHJldmlvdXMgY29udGVudCBpbnN0ZWFkLiAoTW9kZXJuIGJy
b3dzZXJzIGhhdmUKLSAgICAvLyBldmVudHMgdGhhdCBpbmRpY2F0ZSBJTUUgdGFraW5nIHBsYWNl
LCBidXQgdGhlc2UgYXJlIG5vdCB3aWRlbHkKLSAgICAvLyBzdXBwb3J0ZWQgb3IgY29tcGF0aWJs
ZSBlbm91Z2ggeWV0IHRvIHJlbHkgb24uKQotICAgIHZhciBwcmV2SW5wdXQgPSAiIjsKLSAgICBm
dW5jdGlvbiByZWFkSW5wdXQoKSB7Ci0gICAgICBpZiAobGVhdmVJbnB1dEFsb25lIHx8ICFmb2N1
c2VkIHx8IGhhc1NlbGVjdGlvbihpbnB1dCkgfHwgb3B0aW9ucy5yZWFkT25seSkgcmV0dXJuIGZh
bHNlOwotICAgICAgdmFyIHRleHQgPSBpbnB1dC52YWx1ZTsKLSAgICAgIGlmICh0ZXh0ID09IHBy
ZXZJbnB1dCkgcmV0dXJuIGZhbHNlOwotICAgICAgc2hpZnRTZWxlY3RpbmcgPSBudWxsOwotICAg
ICAgdmFyIHNhbWUgPSAwLCBsID0gTWF0aC5taW4ocHJldklucHV0Lmxlbmd0aCwgdGV4dC5sZW5n
dGgpOwotICAgICAgd2hpbGUgKHNhbWUgPCBsICYmIHByZXZJbnB1dFtzYW1lXSA9PSB0ZXh0W3Nh
bWVdKSArK3NhbWU7Ci0gICAgICBpZiAoc2FtZSA8IHByZXZJbnB1dC5sZW5ndGgpCi0gICAgICAg
IHNlbC5mcm9tID0ge2xpbmU6IHNlbC5mcm9tLmxpbmUsIGNoOiBzZWwuZnJvbS5jaCAtIChwcmV2
SW5wdXQubGVuZ3RoIC0gc2FtZSl9OwotICAgICAgZWxzZSBpZiAob3ZlcndyaXRlICYmIHBvc0Vx
KHNlbC5mcm9tLCBzZWwudG8pKQotICAgICAgICBzZWwudG8gPSB7bGluZTogc2VsLnRvLmxpbmUs
IGNoOiBNYXRoLm1pbihnZXRMaW5lKHNlbC50by5saW5lKS50ZXh0Lmxlbmd0aCwgc2VsLnRvLmNo
ICsgKHRleHQubGVuZ3RoIC0gc2FtZSkpfTsKLSAgICAgIHJlcGxhY2VTZWxlY3Rpb24odGV4dC5z
bGljZShzYW1lKSwgImVuZCIpOwotICAgICAgaWYgKHRleHQubGVuZ3RoID4gMTAwMCkgeyBpbnB1
dC52YWx1ZSA9IHByZXZJbnB1dCA9ICIiOyB9Ci0gICAgICBlbHNlIHByZXZJbnB1dCA9IHRleHQ7
Ci0gICAgICByZXR1cm4gdHJ1ZTsKKyAgZnVuY3Rpb24gY2hhckNvb3JkcyhjbSwgcG9zLCBjb250
ZXh0LCBsaW5lT2JqKSB7CisgICAgaWYgKCFsaW5lT2JqKSBsaW5lT2JqID0gZ2V0TGluZShjbS52
aWV3LmRvYywgcG9zLmxpbmUpOworICAgIHJldHVybiBpbnRvQ29vcmRTeXN0ZW0oY20sIGxpbmVP
YmosIHBvcywgbWVhc3VyZUNoYXIoY20sIGxpbmVPYmosIHBvcy5jaCksIGNvbnRleHQpOworICB9
CisKKyAgZnVuY3Rpb24gY3Vyc29yQ29vcmRzKGNtLCBwb3MsIGNvbnRleHQsIGxpbmVPYmosIG1l
YXN1cmVtZW50KSB7CisgICAgbGluZU9iaiA9IGxpbmVPYmogfHwgZ2V0TGluZShjbS52aWV3LmRv
YywgcG9zLmxpbmUpOworICAgIGlmICghbWVhc3VyZW1lbnQpIG1lYXN1cmVtZW50ID0gbWVhc3Vy
ZUxpbmUoY20sIGxpbmVPYmopOworICAgIGZ1bmN0aW9uIGdldChjaCwgcmlnaHQpIHsKKyAgICAg
IHZhciBtID0gbWVhc3VyZUNoYXIoY20sIGxpbmVPYmosIGNoLCBtZWFzdXJlbWVudCk7CisgICAg
ICBpZiAocmlnaHQpIG0ubGVmdCA9IG0ucmlnaHQ7IGVsc2UgbS5yaWdodCA9IG0ubGVmdDsKKyAg
ICAgIHJldHVybiBpbnRvQ29vcmRTeXN0ZW0oY20sIGxpbmVPYmosIHBvcywgbSwgY29udGV4dCk7
CiAgICAgfQotICAgIGZ1bmN0aW9uIHJlc2V0SW5wdXQodXNlcikgewotICAgICAgaWYgKCFwb3NF
cShzZWwuZnJvbSwgc2VsLnRvKSkgewotICAgICAgICBwcmV2SW5wdXQgPSAiIjsKLSAgICAgICAg
aW5wdXQudmFsdWUgPSBnZXRTZWxlY3Rpb24oKTsKLSAgICAgICAgc2VsZWN0SW5wdXQoaW5wdXQp
OwotICAgICAgfSBlbHNlIGlmICh1c2VyKSBwcmV2SW5wdXQgPSBpbnB1dC52YWx1ZSA9ICIiOwot
ICAgIH0KLQotICAgIGZ1bmN0aW9uIGZvY3VzSW5wdXQoKSB7Ci0gICAgICBpZiAob3B0aW9ucy5y
ZWFkT25seSAhPSAibm9jdXJzb3IiKSBpbnB1dC5mb2N1cygpOwotICAgIH0KLQotICAgIGZ1bmN0
aW9uIHNjcm9sbEVkaXRvckludG9WaWV3KCkgewotICAgICAgdmFyIHJlY3QgPSBjdXJzb3IuZ2V0
Qm91bmRpbmdDbGllbnRSZWN0KCk7Ci0gICAgICAvLyBJRSByZXR1cm5zIGJvZ3VzIGNvb3JkaW5h
dGVzIHdoZW4gdGhlIGluc3RhbmNlIHNpdHMgaW5zaWRlIG9mIGFuIGlmcmFtZSBhbmQgdGhlIGN1
cnNvciBpcyBoaWRkZW4KLSAgICAgIGlmIChpZSAmJiByZWN0LnRvcCA9PSByZWN0LmJvdHRvbSkg
cmV0dXJuOwotICAgICAgdmFyIHdpbkggPSB3aW5kb3cuaW5uZXJIZWlnaHQgfHwgTWF0aC5tYXgo
ZG9jdW1lbnQuYm9keS5vZmZzZXRIZWlnaHQsIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5vZmZz
ZXRIZWlnaHQpOwotICAgICAgaWYgKHJlY3QudG9wIDwgMCB8fCByZWN0LmJvdHRvbSA+IHdpbkgp
IHNjcm9sbEN1cnNvckludG9WaWV3KCk7Ci0gICAgfQotICAgIGZ1bmN0aW9uIHNjcm9sbEN1cnNv
ckludG9WaWV3KCkgewotICAgICAgdmFyIGNvb3JkcyA9IGNhbGN1bGF0ZUN1cnNvckNvb3Jkcygp
OwotICAgICAgc2Nyb2xsSW50b1ZpZXcoY29vcmRzLngsIGNvb3Jkcy55LCBjb29yZHMueCwgY29v
cmRzLnlCb3QpOwotICAgIH0KLSAgICBmdW5jdGlvbiBjYWxjdWxhdGVDdXJzb3JDb29yZHMoKSB7
Ci0gICAgICB2YXIgY3Vyc29yID0gbG9jYWxDb29yZHMoc2VsLmludmVydGVkID8gc2VsLmZyb20g
OiBzZWwudG8pOwotICAgICAgdmFyIHggPSBvcHRpb25zLmxpbmVXcmFwcGluZyA/IE1hdGgubWlu
KGN1cnNvci54LCBsaW5lU3BhY2Uub2Zmc2V0V2lkdGgpIDogY3Vyc29yLng7Ci0gICAgICByZXR1
cm4ge3g6IHgsIHk6IGN1cnNvci55LCB5Qm90OiBjdXJzb3IueUJvdH07Ci0gICAgfQotICAgIGZ1
bmN0aW9uIHNjcm9sbEludG9WaWV3KHgxLCB5MSwgeDIsIHkyKSB7Ci0gICAgICB2YXIgc2Nyb2xs
UG9zID0gY2FsY3VsYXRlU2Nyb2xsUG9zKHgxLCB5MSwgeDIsIHkyKTsKLSAgICAgIGlmIChzY3Jv
bGxQb3Muc2Nyb2xsTGVmdCAhPSBudWxsKSB7c2Nyb2xsZXIuc2Nyb2xsTGVmdCA9IHNjcm9sbFBv
cy5zY3JvbGxMZWZ0O30KLSAgICAgIGlmIChzY3JvbGxQb3Muc2Nyb2xsVG9wICE9IG51bGwpIHtz
Y3JvbGxiYXIuc2Nyb2xsVG9wID0gc2Nyb2xsZXIuc2Nyb2xsVG9wID0gc2Nyb2xsUG9zLnNjcm9s
bFRvcDt9Ci0gICAgfQotICAgIGZ1bmN0aW9uIGNhbGN1bGF0ZVNjcm9sbFBvcyh4MSwgeTEsIHgy
LCB5MikgewotICAgICAgdmFyIHBsID0gcGFkZGluZ0xlZnQoKSwgcHQgPSBwYWRkaW5nVG9wKCk7
Ci0gICAgICB5MSArPSBwdDsgeTIgKz0gcHQ7IHgxICs9IHBsOyB4MiArPSBwbDsKLSAgICAgIHZh
ciBzY3JlZW4gPSBzY3JvbGxlci5jbGllbnRIZWlnaHQsIHNjcmVlbnRvcCA9IHNjcm9sbGJhci5z
Y3JvbGxUb3AsIHJlc3VsdCA9IHt9OwotICAgICAgdmFyIGRvY0JvdHRvbSA9IG5lZWRzU2Nyb2xs
YmFyKCkgfHwgSW5maW5pdHk7Ci0gICAgICB2YXIgYXRUb3AgPSB5MSA8IHB0ICsgMTAsIGF0Qm90
dG9tID0geTIgKyBwdCA+IGRvY0JvdHRvbSAtIDEwOwotICAgICAgaWYgKHkxIDwgc2NyZWVudG9w
KSByZXN1bHQuc2Nyb2xsVG9wID0gYXRUb3AgPyAwIDogTWF0aC5tYXgoMCwgeTEpOwotICAgICAg
ZWxzZSBpZiAoeTIgPiBzY3JlZW50b3AgKyBzY3JlZW4pIHJlc3VsdC5zY3JvbGxUb3AgPSAoYXRC
b3R0b20gPyBkb2NCb3R0b20gOiB5MikgLSBzY3JlZW47Ci0KLSAgICAgIHZhciBzY3JlZW53ID0g
c2Nyb2xsZXIuY2xpZW50V2lkdGgsIHNjcmVlbmxlZnQgPSBzY3JvbGxlci5zY3JvbGxMZWZ0Owot
ICAgICAgdmFyIGd1dHRlcncgPSBvcHRpb25zLmZpeGVkR3V0dGVyID8gZ3V0dGVyLmNsaWVudFdp
ZHRoIDogMDsKLSAgICAgIHZhciBhdExlZnQgPSB4MSA8IGd1dHRlcncgKyBwbCArIDEwOwotICAg
ICAgaWYgKHgxIDwgc2NyZWVubGVmdCArIGd1dHRlcncgfHwgYXRMZWZ0KSB7Ci0gICAgICAgIGlm
IChhdExlZnQpIHgxID0gMDsKLSAgICAgICAgcmVzdWx0LnNjcm9sbExlZnQgPSBNYXRoLm1heCgw
LCB4MSAtIDEwIC0gZ3V0dGVydyk7Ci0gICAgICB9IGVsc2UgaWYgKHgyID4gc2NyZWVudyArIHNj
cmVlbmxlZnQgLSAzKSB7Ci0gICAgICAgIHJlc3VsdC5zY3JvbGxMZWZ0ID0geDIgKyAxMCAtIHNj
cmVlbnc7CisgICAgdmFyIG9yZGVyID0gZ2V0T3JkZXIobGluZU9iaiksIGNoID0gcG9zLmNoOwor
ICAgIGlmICghb3JkZXIpIHJldHVybiBnZXQoY2gpOworICAgIHZhciBtYWluLCBvdGhlciwgbGlu
ZWRpciA9IG9yZGVyWzBdLmxldmVsOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3JkZXIubGVu
Z3RoOyArK2kpIHsKKyAgICAgIHZhciBwYXJ0ID0gb3JkZXJbaV0sIHJ0bCA9IHBhcnQubGV2ZWwg
JSAyLCBuYiwgaGVyZTsKKyAgICAgIGlmIChwYXJ0LmZyb20gPCBjaCAmJiBwYXJ0LnRvID4gY2gp
IHJldHVybiBnZXQoY2gsIHJ0bCk7CisgICAgICB2YXIgbGVmdCA9IHJ0bCA/IHBhcnQudG8gOiBw
YXJ0LmZyb20sIHJpZ2h0ID0gcnRsID8gcGFydC5mcm9tIDogcGFydC50bzsKKyAgICAgIGlmIChs
ZWZ0ID09IGNoKSB7CisgICAgICAgIC8vIE9wZXJhIGFuZCBJRSByZXR1cm4gYm9ndXMgb2Zmc2V0
cyBhbmQgd2lkdGhzIGZvciBlZGdlcworICAgICAgICAvLyB3aGVyZSB0aGUgZGlyZWN0aW9uIGZs
aXBzLCBidXQgb25seSBmb3IgdGhlIHNpZGUgd2l0aCB0aGUKKyAgICAgICAgLy8gbG93ZXIgbGV2
ZWwuIFNvIHdlIHRyeSB0byB1c2UgdGhlIHNpZGUgd2l0aCB0aGUgaGlnaGVyCisgICAgICAgIC8v
IGxldmVsLgorICAgICAgICBpZiAoaSAmJiBwYXJ0LmxldmVsIDwgKG5iID0gb3JkZXJbaS0xXSku
bGV2ZWwpIGhlcmUgPSBnZXQobmIubGV2ZWwgJSAyID8gbmIuZnJvbSA6IG5iLnRvIC0gMSwgdHJ1
ZSk7CisgICAgICAgIGVsc2UgaGVyZSA9IGdldChydGwgJiYgcGFydC5mcm9tICE9IHBhcnQudG8g
PyBjaCAtIDEgOiBjaCk7CisgICAgICAgIGlmIChydGwgPT0gbGluZWRpcikgbWFpbiA9IGhlcmU7
IGVsc2Ugb3RoZXIgPSBoZXJlOworICAgICAgfSBlbHNlIGlmIChyaWdodCA9PSBjaCkgeworICAg
ICAgICB2YXIgbmIgPSBpIDwgb3JkZXIubGVuZ3RoIC0gMSAmJiBvcmRlcltpKzFdOworICAgICAg
ICBpZiAoIXJ0bCAmJiBuYiAmJiBuYi5mcm9tID09IG5iLnRvKSBjb250aW51ZTsKKyAgICAgICAg
aWYgKG5iICYmIHBhcnQubGV2ZWwgPCBuYi5sZXZlbCkgaGVyZSA9IGdldChuYi5sZXZlbCAlIDIg
PyBuYi50byAtIDEgOiBuYi5mcm9tKTsKKyAgICAgICAgZWxzZSBoZXJlID0gZ2V0KHJ0bCA/IGNo
IDogY2ggLSAxLCB0cnVlKTsKKyAgICAgICAgaWYgKHJ0bCA9PSBsaW5lZGlyKSBtYWluID0gaGVy
ZTsgZWxzZSBvdGhlciA9IGhlcmU7CiAgICAgICB9Ci0gICAgICByZXR1cm4gcmVzdWx0OwogICAg
IH0KKyAgICBpZiAobGluZWRpciAmJiAhY2gpIG90aGVyID0gZ2V0KG9yZGVyWzBdLnRvIC0gMSk7
CisgICAgaWYgKCFtYWluKSByZXR1cm4gb3RoZXI7CisgICAgaWYgKG90aGVyKSBtYWluLm90aGVy
ID0gb3RoZXI7CisgICAgcmV0dXJuIG1haW47CisgIH0KIAotICAgIGZ1bmN0aW9uIHZpc2libGVM
aW5lcyhzY3JvbGxUb3ApIHsKLSAgICAgIHZhciBsaCA9IHRleHRIZWlnaHQoKSwgdG9wID0gKHNj
cm9sbFRvcCAhPSBudWxsID8gc2Nyb2xsVG9wIDogc2Nyb2xsYmFyLnNjcm9sbFRvcCkgLSBwYWRk
aW5nVG9wKCk7Ci0gICAgICB2YXIgZnJvbUhlaWdodCA9IE1hdGgubWF4KDAsIE1hdGguZmxvb3Io
dG9wIC8gbGgpKTsKLSAgICAgIHZhciB0b0hlaWdodCA9IE1hdGguY2VpbCgodG9wICsgc2Nyb2xs
ZXIuY2xpZW50SGVpZ2h0KSAvIGxoKTsKLSAgICAgIHJldHVybiB7ZnJvbTogbGluZUF0SGVpZ2h0
KGRvYywgZnJvbUhlaWdodCksCi0gICAgICAgICAgICAgIHRvOiBsaW5lQXRIZWlnaHQoZG9jLCB0
b0hlaWdodCl9OworICAvLyBDb29yZHMgbXVzdCBiZSBsaW5lU3BhY2UtbG9jYWwKKyAgZnVuY3Rp
b24gY29vcmRzQ2hhcihjbSwgeCwgeSkgeworICAgIHZhciBkb2MgPSBjbS52aWV3LmRvYzsKKyAg
ICB5ICs9IGNtLmRpc3BsYXkudmlld09mZnNldDsKKyAgICBpZiAoeSA8IDApIHJldHVybiB7bGlu
ZTogMCwgY2g6IDAsIG91dHNpZGU6IHRydWV9OworICAgIHZhciBsaW5lTm8gPSBsaW5lQXRIZWln
aHQoZG9jLCB5KTsKKyAgICBpZiAobGluZU5vID49IGRvYy5zaXplKSByZXR1cm4ge2xpbmU6IGRv
Yy5zaXplIC0gMSwgY2g6IGdldExpbmUoZG9jLCBkb2Muc2l6ZSAtIDEpLnRleHQubGVuZ3RofTsK
KyAgICBpZiAoeCA8IDApIHggPSAwOworCisgICAgZm9yICg7OykgeworICAgICAgdmFyIGxpbmVP
YmogPSBnZXRMaW5lKGRvYywgbGluZU5vKTsKKyAgICAgIHZhciBmb3VuZCA9IGNvb3Jkc0NoYXJJ
bm5lcihjbSwgbGluZU9iaiwgbGluZU5vLCB4LCB5KTsKKyAgICAgIHZhciBtZXJnZWQgPSBjb2xs
YXBzZWRTcGFuQXRFbmQobGluZU9iaik7CisgICAgICBpZiAobWVyZ2VkICYmIGZvdW5kLmNoID09
IGxpbmVSaWdodChsaW5lT2JqKSkKKyAgICAgICAgbGluZU5vID0gbWVyZ2VkLmZpbmQoKS50by5s
aW5lOworICAgICAgZWxzZQorICAgICAgICByZXR1cm4gZm91bmQ7CiAgICAgfQotICAgIC8vIFVz
ZXMgYSBzZXQgb2YgY2hhbmdlcyBwbHVzIHRoZSBjdXJyZW50IHNjcm9sbCBwb3NpdGlvbiB0bwot
ICAgIC8vIGRldGVybWluZSB3aGljaCBET00gdXBkYXRlcyBoYXZlIHRvIGJlIG1hZGUsIGFuZCBt
YWtlcyB0aGUKLSAgICAvLyB1cGRhdGVzLgotICAgIGZ1bmN0aW9uIHVwZGF0ZURpc3BsYXkoY2hh
bmdlcywgc3VwcHJlc3NDYWxsYmFjaywgc2Nyb2xsVG9wKSB7Ci0gICAgICBpZiAoIXNjcm9sbGVy
LmNsaWVudFdpZHRoKSB7Ci0gICAgICAgIHNob3dpbmdGcm9tID0gc2hvd2luZ1RvID0gZGlzcGxh
eU9mZnNldCA9IDA7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICAgIC8vIENvbXB1dGUg
dGhlIG5ldyB2aXNpYmxlIHdpbmRvdwotICAgICAgLy8gSWYgc2Nyb2xsVG9wIGlzIHNwZWNpZmll
ZCwgdXNlIHRoYXQgdG8gZGV0ZXJtaW5lIHdoaWNoIGxpbmVzCi0gICAgICAvLyB0byByZW5kZXIg
aW5zdGVhZCBvZiB0aGUgY3VycmVudCBzY3JvbGxiYXIgcG9zaXRpb24uCi0gICAgICB2YXIgdmlz
aWJsZSA9IHZpc2libGVMaW5lcyhzY3JvbGxUb3ApOwotICAgICAgLy8gQmFpbCBvdXQgaWYgdGhl
IHZpc2libGUgYXJlYSBpcyBhbHJlYWR5IHJlbmRlcmVkIGFuZCBub3RoaW5nIGNoYW5nZWQuCi0g
ICAgICBpZiAoY2hhbmdlcyAhPT0gdHJ1ZSAmJiBjaGFuZ2VzLmxlbmd0aCA9PSAwICYmIHZpc2li
bGUuZnJvbSA+IHNob3dpbmdGcm9tICYmIHZpc2libGUudG8gPCBzaG93aW5nVG8pIHsKLSAgICAg
ICAgdXBkYXRlVmVydGljYWxTY3JvbGwoc2Nyb2xsVG9wKTsKLSAgICAgICAgcmV0dXJuOwotICAg
ICAgfQotICAgICAgdmFyIGZyb20gPSBNYXRoLm1heCh2aXNpYmxlLmZyb20gLSAxMDAsIDApLCB0
byA9IE1hdGgubWluKGRvYy5zaXplLCB2aXNpYmxlLnRvICsgMTAwKTsKLSAgICAgIGlmIChzaG93
aW5nRnJvbSA8IGZyb20gJiYgZnJvbSAtIHNob3dpbmdGcm9tIDwgMjApIGZyb20gPSBzaG93aW5n
RnJvbTsKLSAgICAgIGlmIChzaG93aW5nVG8gPiB0byAmJiBzaG93aW5nVG8gLSB0byA8IDIwKSB0
byA9IE1hdGgubWluKGRvYy5zaXplLCBzaG93aW5nVG8pOworICB9CiAKLSAgICAgIC8vIENyZWF0
ZSBhIHJhbmdlIG9mIHRoZW9yZXRpY2FsbHkgaW50YWN0IGxpbmVzLCBhbmQgcHVuY2ggaG9sZXMK
LSAgICAgIC8vIGluIHRoYXQgdXNpbmcgdGhlIGNoYW5nZSBpbmZvLgotICAgICAgdmFyIGludGFj
dCA9IGNoYW5nZXMgPT09IHRydWUgPyBbXSA6Ci0gICAgICAgIGNvbXB1dGVJbnRhY3QoW3tmcm9t
OiBzaG93aW5nRnJvbSwgdG86IHNob3dpbmdUbywgZG9tU3RhcnQ6IDB9XSwgY2hhbmdlcyk7Ci0g
ICAgICAvLyBDbGlwIG9mZiB0aGUgcGFydHMgdGhhdCB3b24ndCBiZSB2aXNpYmxlCi0gICAgICB2
YXIgaW50YWN0TGluZXMgPSAwOwotICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbnRhY3QubGVu
Z3RoOyArK2kpIHsKLSAgICAgICAgdmFyIHJhbmdlID0gaW50YWN0W2ldOwotICAgICAgICBpZiAo
cmFuZ2UuZnJvbSA8IGZyb20pIHtyYW5nZS5kb21TdGFydCArPSAoZnJvbSAtIHJhbmdlLmZyb20p
OyByYW5nZS5mcm9tID0gZnJvbTt9Ci0gICAgICAgIGlmIChyYW5nZS50byA+IHRvKSByYW5nZS50
byA9IHRvOwotICAgICAgICBpZiAocmFuZ2UuZnJvbSA+PSByYW5nZS50bykgaW50YWN0LnNwbGlj
ZShpLS0sIDEpOwotICAgICAgICBlbHNlIGludGFjdExpbmVzICs9IHJhbmdlLnRvIC0gcmFuZ2Uu
ZnJvbTsKLSAgICAgIH0KLSAgICAgIGlmIChpbnRhY3RMaW5lcyA9PSB0byAtIGZyb20gJiYgZnJv
bSA9PSBzaG93aW5nRnJvbSAmJiB0byA9PSBzaG93aW5nVG8pIHsKLSAgICAgICAgdXBkYXRlVmVy
dGljYWxTY3JvbGwoc2Nyb2xsVG9wKTsKLSAgICAgICAgcmV0dXJuOworICBmdW5jdGlvbiBjb29y
ZHNDaGFySW5uZXIoY20sIGxpbmVPYmosIGxpbmVObywgeCwgeSkgeworICAgIHZhciBkb2MgPSBj
bS52aWV3LmRvYzsKKyAgICB2YXIgaW5uZXJPZmYgPSB5IC0gaGVpZ2h0QXRMaW5lKGNtLCBsaW5l
T2JqKTsKKyAgICB2YXIgd3JvbmdMaW5lID0gZmFsc2UsIGNXaWR0aCA9IGNtLmRpc3BsYXkud3Jh
cHBlci5jbGllbnRXaWR0aDsKKyAgICB2YXIgbWVhc3VyZW1lbnQgPSBtZWFzdXJlTGluZShjbSwg
bGluZU9iaik7CisKKyAgICBmdW5jdGlvbiBnZXRYKGNoKSB7CisgICAgICB2YXIgc3AgPSBjdXJz
b3JDb29yZHMoY20sIHtsaW5lOiBsaW5lTm8sIGNoOiBjaH0sICJsaW5lIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsaW5lT2JqLCBtZWFzdXJlbWVudCk7CisgICAgICB3cm9uZ0xpbmUg
PSB0cnVlOworICAgICAgaWYgKGlubmVyT2ZmID4gc3AuYm90dG9tKSByZXR1cm4gTWF0aC5tYXgo
MCwgc3AubGVmdCAtIGNXaWR0aCk7CisgICAgICBlbHNlIGlmIChpbm5lck9mZiA8IHNwLnRvcCkg
cmV0dXJuIHNwLmxlZnQgKyBjV2lkdGg7CisgICAgICBlbHNlIHdyb25nTGluZSA9IGZhbHNlOwor
ICAgICAgcmV0dXJuIHNwLmxlZnQ7CisgICAgfQorCisgICAgdmFyIGJpZGkgPSBnZXRPcmRlcihs
aW5lT2JqKSwgZGlzdCA9IGxpbmVPYmoudGV4dC5sZW5ndGg7CisgICAgdmFyIGZyb20gPSBsaW5l
TGVmdChsaW5lT2JqKSwgdG8gPSBsaW5lUmlnaHQobGluZU9iaiksIGZyb21YID0gcGFkZGluZ0xl
ZnQoY20uZGlzcGxheSksIHRvWDsKKyAgICBpZiAoIWJpZGkpIHsKKyAgICAgIC8vIEd1ZXNzIGEg
c3VpdGFibGUgdXBwZXIgYm91bmQgZm9yIG91ciBzZWFyY2guCisgICAgICB2YXIgZXN0aW1hdGVk
ID0gTWF0aC5taW4odG8sIE1hdGguY2VpbCgoeCArIE1hdGguZmxvb3IoaW5uZXJPZmYgLyB0ZXh0
SGVpZ2h0KGNtLmRpc3BsYXkpKSAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY1dpZHRoICogLjkpIC8gY2hhcldpZHRoKGNtLmRpc3BsYXkpKSk7CisgICAg
ICBmb3IgKDs7KSB7CisgICAgICAgIHZhciBlc3RYID0gZ2V0WChlc3RpbWF0ZWQpOworICAgICAg
ICBpZiAoZXN0WCA8PSB4ICYmIGVzdGltYXRlZCA8IHRvKSBlc3RpbWF0ZWQgPSBNYXRoLm1pbih0
bywgTWF0aC5jZWlsKGVzdGltYXRlZCAqIDEuMikpOworICAgICAgICBlbHNlIHt0b1ggPSBlc3RY
OyB0byA9IGVzdGltYXRlZDsgYnJlYWs7fQogICAgICAgfQotICAgICAgaW50YWN0LnNvcnQoZnVu
Y3Rpb24oYSwgYikge3JldHVybiBhLmRvbVN0YXJ0IC0gYi5kb21TdGFydDt9KTsKLQotICAgICAg
dmFyIHRoID0gdGV4dEhlaWdodCgpLCBndXR0ZXJEaXNwbGF5ID0gZ3V0dGVyLnN0eWxlLmRpc3Bs
YXk7Ci0gICAgICBsaW5lRGl2LnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7Ci0gICAgICBwYXRjaERp
c3BsYXkoZnJvbSwgdG8sIGludGFjdCk7Ci0gICAgICBsaW5lRGl2LnN0eWxlLmRpc3BsYXkgPSBn
dXR0ZXIuc3R5bGUuZGlzcGxheSA9ICIiOwotCi0gICAgICB2YXIgZGlmZmVyZW50ID0gZnJvbSAh
PSBzaG93aW5nRnJvbSB8fCB0byAhPSBzaG93aW5nVG8gfHwgbGFzdFNpemVDICE9IHNjcm9sbGVy
LmNsaWVudEhlaWdodCArIHRoOwotICAgICAgLy8gVGhpcyBpcyBqdXN0IGEgYm9ndXMgZm9ybXVs
YSB0aGF0IGRldGVjdHMgd2hlbiB0aGUgZWRpdG9yIGlzCi0gICAgICAvLyByZXNpemVkIG9yIHRo
ZSBmb250IHNpemUgY2hhbmdlcy4KLSAgICAgIGlmIChkaWZmZXJlbnQpIGxhc3RTaXplQyA9IHNj
cm9sbGVyLmNsaWVudEhlaWdodCArIHRoOwotICAgICAgc2hvd2luZ0Zyb20gPSBmcm9tOyBzaG93
aW5nVG8gPSB0bzsKLSAgICAgIGRpc3BsYXlPZmZzZXQgPSBoZWlnaHRBdExpbmUoZG9jLCBmcm9t
KTsKLQotICAgICAgLy8gU2luY2UgdGhpcyBpcyBhbGwgcmF0aGVyIGVycm9yIHByb25lLCBpdCBp
cyBob25vdXJlZCB3aXRoIHRoZQotICAgICAgLy8gb25seSBhc3NlcnRpb24gaW4gdGhlIHdob2xl
IGZpbGUuCi0gICAgICBpZiAobGluZURpdi5jaGlsZE5vZGVzLmxlbmd0aCAhPSBzaG93aW5nVG8g
LSBzaG93aW5nRnJvbSkKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCQUQgUEFUQ0ghICIgKyBK
U09OLnN0cmluZ2lmeShpbnRhY3QpICsgIiBzaXplPSIgKyAoc2hvd2luZ1RvIC0gc2hvd2luZ0Zy
b20pICsKLSAgICAgICAgICAgICAgICAgICAgICAgICIgbm9kZXM9IiArIGxpbmVEaXYuY2hpbGRO
b2Rlcy5sZW5ndGgpOwotCi0gICAgICBmdW5jdGlvbiBjaGVja0hlaWdodHMoKSB7Ci0gICAgICAg
IHZhciBjdXJOb2RlID0gbGluZURpdi5maXJzdENoaWxkLCBoZWlnaHRDaGFuZ2VkID0gZmFsc2U7
Ci0gICAgICAgIGRvYy5pdGVyKHNob3dpbmdGcm9tLCBzaG93aW5nVG8sIGZ1bmN0aW9uKGxpbmUp
IHsKLSAgICAgICAgICAvLyBXb3JrIGFyb3VuZCBiaXphcnJvIElFNyBidWcgd2hlcmUsIHNvbWV0
aW1lcywgb3VyIGN1ck5vZGUKLSAgICAgICAgICAvLyBpcyBtYWdpY2FsbHkgcmVwbGFjZWQgd2l0
aCBhIG5ldyBub2RlIGluIHRoZSBET00sIGxlYXZpbmcKLSAgICAgICAgICAvLyB1cyB3aXRoIGEg
cmVmZXJlbmNlIHRvIGFuIG9ycGhhbiAobmV4dFNpYmxpbmctbGVzcykgbm9kZS4KLSAgICAgICAg
ICBpZiAoIWN1ck5vZGUpIHJldHVybjsKLSAgICAgICAgICBpZiAoIWxpbmUuaGlkZGVuKSB7Ci0g
ICAgICAgICAgICB2YXIgaGVpZ2h0ID0gTWF0aC5yb3VuZChjdXJOb2RlLm9mZnNldEhlaWdodCAv
IHRoKSB8fCAxOwotICAgICAgICAgICAgaWYgKGxpbmUuaGVpZ2h0ICE9IGhlaWdodCkgewotICAg
ICAgICAgICAgICB1cGRhdGVMaW5lSGVpZ2h0KGxpbmUsIGhlaWdodCk7Ci0gICAgICAgICAgICAg
IGd1dHRlckRpcnR5ID0gaGVpZ2h0Q2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgfQotICAgICAgICAgIGN1ck5vZGUgPSBjdXJOb2RlLm5leHRTaWJsaW5nOwotICAgICAg
ICB9KTsKLSAgICAgICAgcmV0dXJuIGhlaWdodENoYW5nZWQ7Ci0gICAgICB9Ci0KLSAgICAgIGlm
IChvcHRpb25zLmxpbmVXcmFwcGluZykgewotICAgICAgICBjaGVja0hlaWdodHMoKTsKLSAgICAg
ICAgdmFyIHNjcm9sbEhlaWdodCA9IG5lZWRzU2Nyb2xsYmFyKCk7Ci0gICAgICAgIHZhciBzaG91
bGRIYXZlU2Nyb2xsYmFyID0gc2Nyb2xsSGVpZ2h0ID8gImJsb2NrIiA6ICJub25lIjsKLSAgICAg
ICAgaWYgKHNjcm9sbGJhci5zdHlsZS5kaXNwbGF5ICE9IHNob3VsZEhhdmVTY3JvbGxiYXIpIHsK
LSAgICAgICAgICBzY3JvbGxiYXIuc3R5bGUuZGlzcGxheSA9IHNob3VsZEhhdmVTY3JvbGxiYXI7
Ci0gICAgICAgICAgaWYgKHNjcm9sbEhlaWdodCkgc2Nyb2xsYmFySW5uZXIuc3R5bGUuaGVpZ2h0
ID0gc2Nyb2xsSGVpZ2h0ICsgInB4IjsKLSAgICAgICAgICBjaGVja0hlaWdodHMoKTsKLSAgICAg
ICAgfQorICAgICAgLy8gVHJ5IHRvIGd1ZXNzIGEgc3VpdGFibGUgbG93ZXIgYm91bmQgYXMgd2Vs
bC4KKyAgICAgIGVzdGltYXRlZCA9IE1hdGguZmxvb3IodG8gKiAwLjgpOyBlc3RYID0gZ2V0WChl
c3RpbWF0ZWQpOworICAgICAgaWYgKGVzdFggPCB4KSB7ZnJvbSA9IGVzdGltYXRlZDsgZnJvbVgg
PSBlc3RYO30KKyAgICAgIGRpc3QgPSB0byAtIGZyb207CisgICAgfSBlbHNlIHRvWCA9IGdldFgo
dG8pOworICAgIGlmICh4ID4gdG9YKSByZXR1cm4ge2xpbmU6IGxpbmVObywgY2g6IHRvLCBvdXRz
aWRlOiB3cm9uZ0xpbmV9OworICAgIC8vIERvIGEgYmluYXJ5IHNlYXJjaCBiZXR3ZWVuIHRoZXNl
IGJvdW5kcy4KKyAgICBmb3IgKDs7KSB7CisgICAgICBpZiAoYmlkaSA/IHRvID09IGZyb20gfHwg
dG8gPT0gbW92ZVZpc3VhbGx5KGxpbmVPYmosIGZyb20sIDEpIDogdG8gLSBmcm9tIDw9IDEpIHsK
KyAgICAgICAgdmFyIGFmdGVyID0geCAtIGZyb21YIDwgdG9YIC0geCwgY2ggPSBhZnRlciA/IGZy
b20gOiB0bzsKKyAgICAgICAgd2hpbGUgKGlzRXh0ZW5kaW5nQ2hhci50ZXN0KGxpbmVPYmoudGV4
dC5jaGFyQXQoY2gpKSkgKytjaDsKKyAgICAgICAgcmV0dXJuIHtsaW5lOiBsaW5lTm8sIGNoOiBj
aCwgYWZ0ZXI6IGFmdGVyLCBvdXRzaWRlOiB3cm9uZ0xpbmV9OwogICAgICAgfQotCi0gICAgICBn
dXR0ZXIuc3R5bGUuZGlzcGxheSA9IGd1dHRlckRpc3BsYXk7Ci0gICAgICBpZiAoZGlmZmVyZW50
IHx8IGd1dHRlckRpcnR5KSB7Ci0gICAgICAgIC8vIElmIHRoZSBndXR0ZXIgZ3JldyBpbiBzaXpl
LCByZS1jaGVjayBoZWlnaHRzLiBJZiB0aG9zZSBjaGFuZ2VkLCByZS1kcmF3IGd1dHRlci4KLSAg
ICAgICAgdXBkYXRlR3V0dGVyKCkgJiYgb3B0aW9ucy5saW5lV3JhcHBpbmcgJiYgY2hlY2tIZWln
aHRzKCkgJiYgdXBkYXRlR3V0dGVyKCk7CisgICAgICB2YXIgc3RlcCA9IE1hdGguY2VpbChkaXN0
IC8gMiksIG1pZGRsZSA9IGZyb20gKyBzdGVwOworICAgICAgaWYgKGJpZGkpIHsKKyAgICAgICAg
bWlkZGxlID0gZnJvbTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGVwOyArK2kpIG1p
ZGRsZSA9IG1vdmVWaXN1YWxseShsaW5lT2JqLCBtaWRkbGUsIDEpOwogICAgICAgfQotICAgICAg
dXBkYXRlVmVydGljYWxTY3JvbGwoc2Nyb2xsVG9wKTsKLSAgICAgIHVwZGF0ZVNlbGVjdGlvbigp
OwotICAgICAgaWYgKCFzdXBwcmVzc0NhbGxiYWNrICYmIG9wdGlvbnMub25VcGRhdGUpIG9wdGlv
bnMub25VcGRhdGUoaW5zdGFuY2UpOwotICAgICAgcmV0dXJuIHRydWU7CisgICAgICB2YXIgbWlk
ZGxlWCA9IGdldFgobWlkZGxlKTsKKyAgICAgIGlmIChtaWRkbGVYID4geCkge3RvID0gbWlkZGxl
OyB0b1ggPSBtaWRkbGVYOyBpZiAod3JvbmdMaW5lKSB0b1ggKz0gMTAwMDsgZGlzdCAtPSBzdGVw
O30KKyAgICAgIGVsc2Uge2Zyb20gPSBtaWRkbGU7IGZyb21YID0gbWlkZGxlWDsgZGlzdCA9IHN0
ZXA7fQogICAgIH0KKyAgfQogCi0gICAgZnVuY3Rpb24gY29tcHV0ZUludGFjdChpbnRhY3QsIGNo
YW5nZXMpIHsKLSAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gY2hhbmdlcy5sZW5ndGggfHwgMDsg
aSA8IGw7ICsraSkgewotICAgICAgICB2YXIgY2hhbmdlID0gY2hhbmdlc1tpXSwgaW50YWN0MiA9
IFtdLCBkaWZmID0gY2hhbmdlLmRpZmYgfHwgMDsKLSAgICAgICAgZm9yICh2YXIgaiA9IDAsIGwy
ID0gaW50YWN0Lmxlbmd0aDsgaiA8IGwyOyArK2opIHsKLSAgICAgICAgICB2YXIgcmFuZ2UgPSBp
bnRhY3Rbal07Ci0gICAgICAgICAgaWYgKGNoYW5nZS50byA8PSByYW5nZS5mcm9tICYmIGNoYW5n
ZS5kaWZmKQotICAgICAgICAgICAgaW50YWN0Mi5wdXNoKHtmcm9tOiByYW5nZS5mcm9tICsgZGlm
ZiwgdG86IHJhbmdlLnRvICsgZGlmZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tU3Rh
cnQ6IHJhbmdlLmRvbVN0YXJ0fSk7Ci0gICAgICAgICAgZWxzZSBpZiAoY2hhbmdlLnRvIDw9IHJh
bmdlLmZyb20gfHwgY2hhbmdlLmZyb20gPj0gcmFuZ2UudG8pCi0gICAgICAgICAgICBpbnRhY3Qy
LnB1c2gocmFuZ2UpOwotICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgaWYgKGNoYW5nZS5m
cm9tID4gcmFuZ2UuZnJvbSkKLSAgICAgICAgICAgICAgaW50YWN0Mi5wdXNoKHtmcm9tOiByYW5n
ZS5mcm9tLCB0bzogY2hhbmdlLmZyb20sIGRvbVN0YXJ0OiByYW5nZS5kb21TdGFydH0pOwotICAg
ICAgICAgICAgaWYgKGNoYW5nZS50byA8IHJhbmdlLnRvKQotICAgICAgICAgICAgICBpbnRhY3Qy
LnB1c2goe2Zyb206IGNoYW5nZS50byArIGRpZmYsIHRvOiByYW5nZS50byArIGRpZmYsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZG9tU3RhcnQ6IHJhbmdlLmRvbVN0YXJ0ICsgKGNoYW5n
ZS50byAtIHJhbmdlLmZyb20pfSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlu
dGFjdCA9IGludGFjdDI7CisgIHZhciBtZWFzdXJlVGV4dDsKKyAgZnVuY3Rpb24gdGV4dEhlaWdo
dChkaXNwbGF5KSB7CisgICAgaWYgKGRpc3BsYXkuY2FjaGVkVGV4dEhlaWdodCAhPSBudWxsKSBy
ZXR1cm4gZGlzcGxheS5jYWNoZWRUZXh0SGVpZ2h0OworICAgIGlmIChtZWFzdXJlVGV4dCA9PSBu
dWxsKSB7CisgICAgICBtZWFzdXJlVGV4dCA9IGVsdCgicHJlIik7CisgICAgICAvLyBNZWFzdXJl
IGEgYnVuY2ggb2YgbGluZXMsIGZvciBicm93c2VycyB0aGF0IGNvbXB1dGUKKyAgICAgIC8vIGZy
YWN0aW9uYWwgaGVpZ2h0cy4KKyAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNDk7ICsraSkgewor
ICAgICAgICBtZWFzdXJlVGV4dC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgi
eCIpKTsKKyAgICAgICAgbWVhc3VyZVRleHQuYXBwZW5kQ2hpbGQoZWx0KCJiciIpKTsKICAgICAg
IH0KLSAgICAgIHJldHVybiBpbnRhY3Q7CisgICAgICBtZWFzdXJlVGV4dC5hcHBlbmRDaGlsZChk
b2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgieCIpKTsKICAgICB9CisgICAgcmVtb3ZlQ2hpbGRyZW5B
bmRBZGQoZGlzcGxheS5tZWFzdXJlLCBtZWFzdXJlVGV4dCk7CisgICAgdmFyIGhlaWdodCA9IG1l
YXN1cmVUZXh0Lm9mZnNldEhlaWdodCAvIDUwOworICAgIGlmIChoZWlnaHQgPiAzKSBkaXNwbGF5
LmNhY2hlZFRleHRIZWlnaHQgPSBoZWlnaHQ7CisgICAgcmVtb3ZlQ2hpbGRyZW4oZGlzcGxheS5t
ZWFzdXJlKTsKKyAgICByZXR1cm4gaGVpZ2h0IHx8IDE7CisgIH0KIAotICAgIGZ1bmN0aW9uIHBh
dGNoRGlzcGxheShmcm9tLCB0bywgaW50YWN0KSB7Ci0gICAgICBmdW5jdGlvbiBraWxsTm9kZShu
b2RlKSB7Ci0gICAgICAgIHZhciB0bXAgPSBub2RlLm5leHRTaWJsaW5nOwotICAgICAgICBub2Rl
LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobm9kZSk7Ci0gICAgICAgIHJldHVybiB0bXA7Ci0gICAg
ICB9Ci0gICAgICAvLyBUaGUgZmlyc3QgcGFzcyByZW1vdmVzIHRoZSBET00gbm9kZXMgdGhhdCBh
cmVuJ3QgaW50YWN0LgotICAgICAgaWYgKCFpbnRhY3QubGVuZ3RoKSByZW1vdmVDaGlsZHJlbihs
aW5lRGl2KTsKLSAgICAgIGVsc2UgewotICAgICAgICB2YXIgZG9tUG9zID0gMCwgY3VyTm9kZSA9
IGxpbmVEaXYuZmlyc3RDaGlsZCwgbjsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbnRh
Y3QubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICB2YXIgY3VyID0gaW50YWN0W2ldOwotICAgICAg
ICAgIHdoaWxlIChjdXIuZG9tU3RhcnQgPiBkb21Qb3MpIHtjdXJOb2RlID0ga2lsbE5vZGUoY3Vy
Tm9kZSk7IGRvbVBvcysrO30KLSAgICAgICAgICBmb3IgKHZhciBqID0gMCwgZSA9IGN1ci50byAt
IGN1ci5mcm9tOyBqIDwgZTsgKytqKSB7Y3VyTm9kZSA9IGN1ck5vZGUubmV4dFNpYmxpbmc7IGRv
bVBvcysrO30KLSAgICAgICAgfQotICAgICAgICB3aGlsZSAoY3VyTm9kZSkgY3VyTm9kZSA9IGtp
bGxOb2RlKGN1ck5vZGUpOwotICAgICAgfQotICAgICAgLy8gVGhpcyBwYXNzIGZpbGxzIGluIHRo
ZSBsaW5lcyB0aGF0IGFjdHVhbGx5IGNoYW5nZWQuCi0gICAgICB2YXIgbmV4dEludGFjdCA9IGlu
dGFjdC5zaGlmdCgpLCBjdXJOb2RlID0gbGluZURpdi5maXJzdENoaWxkLCBqID0gZnJvbTsKLSAg
ICAgIGRvYy5pdGVyKGZyb20sIHRvLCBmdW5jdGlvbihsaW5lKSB7Ci0gICAgICAgIGlmIChuZXh0
SW50YWN0ICYmIG5leHRJbnRhY3QudG8gPT0gaikgbmV4dEludGFjdCA9IGludGFjdC5zaGlmdCgp
OwotICAgICAgICBpZiAoIW5leHRJbnRhY3QgfHwgbmV4dEludGFjdC5mcm9tID4gaikgewotICAg
ICAgICAgIGlmIChsaW5lLmhpZGRlbikgdmFyIGxpbmVFbGVtZW50ID0gZWx0KCJwcmUiKTsKLSAg
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHZhciBsaW5lRWxlbWVudCA9IGxpbmUuZ2V0RWxl
bWVudChtYWtlVGFiKTsKLSAgICAgICAgICAgIGlmIChsaW5lLmNsYXNzTmFtZSkgbGluZUVsZW1l
bnQuY2xhc3NOYW1lID0gbGluZS5jbGFzc05hbWU7Ci0gICAgICAgICAgICAvLyBLbHVkZ2UgdG8g
bWFrZSBzdXJlIHRoZSBzdHlsZWQgZWxlbWVudCBsaWVzIGJlaGluZCB0aGUgc2VsZWN0aW9uIChi
eSB6LWluZGV4KQotICAgICAgICAgICAgaWYgKGxpbmUuYmdDbGFzc05hbWUpIHsKLSAgICAgICAg
ICAgICAgdmFyIHByZSA9IGVsdCgicHJlIiwgIlx1MDBhMCIsIGxpbmUuYmdDbGFzc05hbWUsICJw
b3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6IDA7IHJpZ2h0OiAwOyB0b3A6IDA7IGJvdHRvbTogMDsg
ei1pbmRleDogLTIiKTsKLSAgICAgICAgICAgICAgbGluZUVsZW1lbnQgPSBlbHQoImRpdiIsIFtw
cmUsIGxpbmVFbGVtZW50XSwgbnVsbCwgInBvc2l0aW9uOiByZWxhdGl2ZSIpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBsaW5lRGl2Lmluc2VydEJlZm9yZShsaW5lRWxl
bWVudCwgY3VyTm9kZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgY3VyTm9kZSA9IGN1
ck5vZGUubmV4dFNpYmxpbmc7Ci0gICAgICAgIH0KLSAgICAgICAgKytqOwotICAgICAgfSk7Ci0g
ICAgfQorICBmdW5jdGlvbiBjaGFyV2lkdGgoZGlzcGxheSkgeworICAgIGlmIChkaXNwbGF5LmNh
Y2hlZENoYXJXaWR0aCAhPSBudWxsKSByZXR1cm4gZGlzcGxheS5jYWNoZWRDaGFyV2lkdGg7Cisg
ICAgdmFyIGFuY2hvciA9IGVsdCgic3BhbiIsICJ4Iik7CisgICAgdmFyIHByZSA9IGVsdCgicHJl
IiwgW2FuY2hvcl0pOworICAgIHJlbW92ZUNoaWxkcmVuQW5kQWRkKGRpc3BsYXkubWVhc3VyZSwg
cHJlKTsKKyAgICB2YXIgd2lkdGggPSBhbmNob3Iub2Zmc2V0V2lkdGg7CisgICAgaWYgKHdpZHRo
ID4gMikgZGlzcGxheS5jYWNoZWRDaGFyV2lkdGggPSB3aWR0aDsKKyAgICByZXR1cm4gd2lkdGgg
fHwgMTA7CisgIH0KIAotICAgIGZ1bmN0aW9uIHVwZGF0ZUd1dHRlcigpIHsKLSAgICAgIGlmICgh
b3B0aW9ucy5ndXR0ZXIgJiYgIW9wdGlvbnMubGluZU51bWJlcnMpIHJldHVybjsKLSAgICAgIHZh
ciBoVGV4dCA9IG1vdmVyLm9mZnNldEhlaWdodCwgaEVkaXRvciA9IHNjcm9sbGVyLmNsaWVudEhl
aWdodDsKLSAgICAgIGd1dHRlci5zdHlsZS5oZWlnaHQgPSAoaFRleHQgLSBoRWRpdG9yIDwgMiA/
IGhFZGl0b3IgOiBoVGV4dCkgKyAicHgiOwotICAgICAgdmFyIGZyYWdtZW50ID0gZG9jdW1lbnQu
Y3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLCBpID0gc2hvd2luZ0Zyb20sIG5vcm1hbE5vZGU7Ci0g
ICAgICBkb2MuaXRlcihzaG93aW5nRnJvbSwgTWF0aC5tYXgoc2hvd2luZ1RvLCBzaG93aW5nRnJv
bSArIDEpLCBmdW5jdGlvbihsaW5lKSB7Ci0gICAgICAgIGlmIChsaW5lLmhpZGRlbikgewotICAg
ICAgICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKGVsdCgicHJlIikpOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgIHZhciBtYXJrZXIgPSBsaW5lLmd1dHRlck1hcmtlcjsKLSAgICAgICAgICB2
YXIgdGV4dCA9IG9wdGlvbnMubGluZU51bWJlcnMgPyBvcHRpb25zLmxpbmVOdW1iZXJGb3JtYXR0
ZXIoaSArIG9wdGlvbnMuZmlyc3RMaW5lTnVtYmVyKSA6IG51bGw7Ci0gICAgICAgICAgaWYgKG1h
cmtlciAmJiBtYXJrZXIudGV4dCkKLSAgICAgICAgICAgIHRleHQgPSBtYXJrZXIudGV4dC5yZXBs
YWNlKCIlTiUiLCB0ZXh0ICE9IG51bGwgPyB0ZXh0IDogIiIpOwotICAgICAgICAgIGVsc2UgaWYg
KHRleHQgPT0gbnVsbCkKLSAgICAgICAgICAgIHRleHQgPSAiXHUwMGEwIjsKLSAgICAgICAgICB2
YXIgbWFya2VyRWxlbWVudCA9IGZyYWdtZW50LmFwcGVuZENoaWxkKGVsdCgicHJlIiwgbnVsbCwg
bWFya2VyICYmIG1hcmtlci5zdHlsZSkpOwotICAgICAgICAgIG1hcmtlckVsZW1lbnQuaW5uZXJI
VE1MID0gdGV4dDsKLSAgICAgICAgICBmb3IgKHZhciBqID0gMTsgaiA8IGxpbmUuaGVpZ2h0OyAr
K2opIHsKLSAgICAgICAgICAgIG1hcmtlckVsZW1lbnQuYXBwZW5kQ2hpbGQoZWx0KCJiciIpKTsK
LSAgICAgICAgICAgIG1hcmtlckVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4
dE5vZGUoIlx1MDBhMCIpKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKCFtYXJrZXIpIG5v
cm1hbE5vZGUgPSBpOwotICAgICAgICB9Ci0gICAgICAgICsraTsKLSAgICAgIH0pOwotICAgICAg
Z3V0dGVyLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7Ci0gICAgICByZW1vdmVDaGlsZHJlbkFuZEFk
ZChndXR0ZXJUZXh0LCBmcmFnbWVudCk7Ci0gICAgICAvLyBNYWtlIHN1cmUgc2Nyb2xsaW5nIGRv
ZXNuJ3QgY2F1c2UgbnVtYmVyIGd1dHRlciBzaXplIHRvIHBvcAotICAgICAgaWYgKG5vcm1hbE5v
ZGUgIT0gbnVsbCAmJiBvcHRpb25zLmxpbmVOdW1iZXJzKSB7Ci0gICAgICAgIHZhciBub2RlID0g
Z3V0dGVyVGV4dC5jaGlsZE5vZGVzW25vcm1hbE5vZGUgLSBzaG93aW5nRnJvbV07Ci0gICAgICAg
IHZhciBtaW53aWR0aCA9IFN0cmluZyhkb2Muc2l6ZSkubGVuZ3RoLCB2YWwgPSBlbHRUZXh0KG5v
ZGUuZmlyc3RDaGlsZCksIHBhZCA9ICIiOwotICAgICAgICB3aGlsZSAodmFsLmxlbmd0aCArIHBh
ZC5sZW5ndGggPCBtaW53aWR0aCkgcGFkICs9ICJcdTAwYTAiOwotICAgICAgICBpZiAocGFkKSBu
b2RlLmluc2VydEJlZm9yZShkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShwYWQpLCBub2RlLmZpcnN0
Q2hpbGQpOwotICAgICAgfQotICAgICAgZ3V0dGVyLnN0eWxlLmRpc3BsYXkgPSAiIjsKLSAgICAg
IHZhciByZXNpemVkID0gTWF0aC5hYnMoKHBhcnNlSW50KGxpbmVTcGFjZS5zdHlsZS5tYXJnaW5M
ZWZ0KSB8fCAwKSAtIGd1dHRlci5vZmZzZXRXaWR0aCkgPiAyOwotICAgICAgbGluZVNwYWNlLnN0
eWxlLm1hcmdpbkxlZnQgPSBndXR0ZXIub2Zmc2V0V2lkdGggKyAicHgiOwotICAgICAgZ3V0dGVy
RGlydHkgPSBmYWxzZTsKLSAgICAgIHJldHVybiByZXNpemVkOwotICAgIH0KLSAgICBmdW5jdGlv
biB1cGRhdGVTZWxlY3Rpb24oKSB7Ci0gICAgICB2YXIgY29sbGFwc2VkID0gcG9zRXEoc2VsLmZy
b20sIHNlbC50byk7Ci0gICAgICB2YXIgZnJvbVBvcyA9IGxvY2FsQ29vcmRzKHNlbC5mcm9tLCB0
cnVlKTsKLSAgICAgIHZhciB0b1BvcyA9IGNvbGxhcHNlZCA/IGZyb21Qb3MgOiBsb2NhbENvb3Jk
cyhzZWwudG8sIHRydWUpOwotICAgICAgdmFyIGhlYWRQb3MgPSBzZWwuaW52ZXJ0ZWQgPyBmcm9t
UG9zIDogdG9Qb3MsIHRoID0gdGV4dEhlaWdodCgpOwotICAgICAgdmFyIHdyYXBPZmYgPSBlbHRP
ZmZzZXQod3JhcHBlciksIGxpbmVPZmYgPSBlbHRPZmZzZXQobGluZURpdik7Ci0gICAgICBpbnB1
dERpdi5zdHlsZS50b3AgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihzY3JvbGxlci5vZmZzZXRIZWln
aHQsIGhlYWRQb3MueSArIGxpbmVPZmYudG9wIC0gd3JhcE9mZi50b3ApKSArICJweCI7Ci0gICAg
ICBpbnB1dERpdi5zdHlsZS5sZWZ0ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oc2Nyb2xsZXIub2Zm
c2V0V2lkdGgsIGhlYWRQb3MueCArIGxpbmVPZmYubGVmdCAtIHdyYXBPZmYubGVmdCkpICsgInB4
IjsKLSAgICAgIGlmIChjb2xsYXBzZWQpIHsKLSAgICAgICAgY3Vyc29yLnN0eWxlLnRvcCA9IGhl
YWRQb3MueSArICJweCI7Ci0gICAgICAgIGN1cnNvci5zdHlsZS5sZWZ0ID0gKG9wdGlvbnMubGlu
ZVdyYXBwaW5nID8gTWF0aC5taW4oaGVhZFBvcy54LCBsaW5lU3BhY2Uub2Zmc2V0V2lkdGgpIDog
aGVhZFBvcy54KSArICJweCI7Ci0gICAgICAgIGN1cnNvci5zdHlsZS5kaXNwbGF5ID0gIiI7Ci0g
ICAgICAgIHNlbGVjdGlvbkRpdi5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwotICAgICAgfSBlbHNl
IHsKLSAgICAgICAgdmFyIHNhbWVMaW5lID0gZnJvbVBvcy55ID09IHRvUG9zLnksIGZyYWdtZW50
ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOwotICAgICAgICB2YXIgY2xpZW50
V2lkdGggPSBsaW5lU3BhY2UuY2xpZW50V2lkdGggfHwgbGluZVNwYWNlLm9mZnNldFdpZHRoOwot
ICAgICAgICB2YXIgY2xpZW50SGVpZ2h0ID0gbGluZVNwYWNlLmNsaWVudEhlaWdodCB8fCBsaW5l
U3BhY2Uub2Zmc2V0SGVpZ2h0OwotICAgICAgICB2YXIgYWRkID0gZnVuY3Rpb24obGVmdCwgdG9w
LCByaWdodCwgaGVpZ2h0KSB7Ci0gICAgICAgICAgdmFyIHJzdHlsZSA9IHF1aXJrc01vZGUgPyAi
d2lkdGg6ICIgKyAoIXJpZ2h0ID8gY2xpZW50V2lkdGggOiBjbGllbnRXaWR0aCAtIHJpZ2h0IC0g
bGVmdCkgKyAicHgiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAicmlnaHQ6
ICIgKyByaWdodCArICJweCI7Ci0gICAgICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoZWx0KCJk
aXYiLCBudWxsLCAiQ29kZU1pcnJvci1zZWxlY3RlZCIsICJwb3NpdGlvbjogYWJzb2x1dGU7IGxl
ZnQ6ICIgKyBsZWZ0ICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB4OyB0
b3A6ICIgKyB0b3AgKyAicHg7ICIgKyByc3R5bGUgKyAiOyBoZWlnaHQ6ICIgKyBoZWlnaHQgKyAi
cHgiKSk7Ci0gICAgICAgIH07Ci0gICAgICAgIGlmIChzZWwuZnJvbS5jaCAmJiBmcm9tUG9zLnkg
Pj0gMCkgewotICAgICAgICAgIHZhciByaWdodCA9IHNhbWVMaW5lID8gY2xpZW50V2lkdGggLSB0
b1Bvcy54IDogMDsKLSAgICAgICAgICBhZGQoZnJvbVBvcy54LCBmcm9tUG9zLnksIHJpZ2h0LCB0
aCk7Ci0gICAgICAgIH0KLSAgICAgICAgdmFyIG1pZGRsZVN0YXJ0ID0gTWF0aC5tYXgoMCwgZnJv
bVBvcy55ICsgKHNlbC5mcm9tLmNoID8gdGggOiAwKSk7Ci0gICAgICAgIHZhciBtaWRkbGVIZWln
aHQgPSBNYXRoLm1pbih0b1Bvcy55LCBjbGllbnRIZWlnaHQpIC0gbWlkZGxlU3RhcnQ7Ci0gICAg
ICAgIGlmIChtaWRkbGVIZWlnaHQgPiAwLjIgKiB0aCkKLSAgICAgICAgICBhZGQoMCwgbWlkZGxl
U3RhcnQsIDAsIG1pZGRsZUhlaWdodCk7Ci0gICAgICAgIGlmICgoIXNhbWVMaW5lIHx8ICFzZWwu
ZnJvbS5jaCkgJiYgdG9Qb3MueSA8IGNsaWVudEhlaWdodCAtIC41ICogdGgpCi0gICAgICAgICAg
YWRkKDAsIHRvUG9zLnksIGNsaWVudFdpZHRoIC0gdG9Qb3MueCwgdGgpOwotICAgICAgICByZW1v
dmVDaGlsZHJlbkFuZEFkZChzZWxlY3Rpb25EaXYsIGZyYWdtZW50KTsKLSAgICAgICAgY3Vyc29y
LnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7Ci0gICAgICAgIHNlbGVjdGlvbkRpdi5zdHlsZS5kaXNw
bGF5ID0gIiI7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gc2V0U2hpZnQodmFsKSB7
Ci0gICAgICBpZiAodmFsKSBzaGlmdFNlbGVjdGluZyA9IHNoaWZ0U2VsZWN0aW5nIHx8IChzZWwu
aW52ZXJ0ZWQgPyBzZWwudG8gOiBzZWwuZnJvbSk7Ci0gICAgICBlbHNlIHNoaWZ0U2VsZWN0aW5n
ID0gbnVsbDsKLSAgICB9Ci0gICAgZnVuY3Rpb24gc2V0U2VsZWN0aW9uVXNlcihmcm9tLCB0bykg
ewotICAgICAgdmFyIHNoID0gc2hpZnRTZWxlY3RpbmcgJiYgY2xpcFBvcyhzaGlmdFNlbGVjdGlu
Zyk7Ci0gICAgICBpZiAoc2gpIHsKLSAgICAgICAgaWYgKHBvc0xlc3Moc2gsIGZyb20pKSBmcm9t
ID0gc2g7Ci0gICAgICAgIGVsc2UgaWYgKHBvc0xlc3ModG8sIHNoKSkgdG8gPSBzaDsKLSAgICAg
IH0KLSAgICAgIHNldFNlbGVjdGlvbihmcm9tLCB0byk7Ci0gICAgICB1c2VyU2VsQ2hhbmdlID0g
dHJ1ZTsKLSAgICB9Ci0gICAgLy8gVXBkYXRlIHRoZSBzZWxlY3Rpb24uIExhc3QgdHdvIGFyZ3Mg
YXJlIG9ubHkgdXNlZCBieQotICAgIC8vIHVwZGF0ZUxpbmVzLCBzaW5jZSB0aGV5IGhhdmUgdG8g
YmUgZXhwcmVzc2VkIGluIHRoZSBsaW5lCi0gICAgLy8gbnVtYmVycyBiZWZvcmUgdGhlIHVwZGF0
ZS4KLSAgICBmdW5jdGlvbiBzZXRTZWxlY3Rpb24oZnJvbSwgdG8sIG9sZEZyb20sIG9sZFRvKSB7
Ci0gICAgICBnb2FsQ29sdW1uID0gbnVsbDsKLSAgICAgIGlmIChvbGRGcm9tID09IG51bGwpIHtv
bGRGcm9tID0gc2VsLmZyb20ubGluZTsgb2xkVG8gPSBzZWwudG8ubGluZTt9Ci0gICAgICBpZiAo
cG9zRXEoc2VsLmZyb20sIGZyb20pICYmIHBvc0VxKHNlbC50bywgdG8pKSByZXR1cm47Ci0gICAg
ICBpZiAocG9zTGVzcyh0bywgZnJvbSkpIHt2YXIgdG1wID0gdG87IHRvID0gZnJvbTsgZnJvbSA9
IHRtcDt9Ci0KLSAgICAgIC8vIFNraXAgb3ZlciBoaWRkZW4gbGluZXMuCi0gICAgICBpZiAoZnJv
bS5saW5lICE9IG9sZEZyb20pIHsKLSAgICAgICAgdmFyIGZyb20xID0gc2tpcEhpZGRlbihmcm9t
LCBvbGRGcm9tLCBzZWwuZnJvbS5jaCk7Ci0gICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIG5vbi1o
aWRkZW4gbGluZSBsZWZ0LCBmb3JjZSB2aXNpYmlsaXR5IG9uIGN1cnJlbnQgbGluZQotICAgICAg
ICBpZiAoIWZyb20xKSBzZXRMaW5lSGlkZGVuKGZyb20ubGluZSwgZmFsc2UpOwotICAgICAgICBl
bHNlIGZyb20gPSBmcm9tMTsKLSAgICAgIH0KLSAgICAgIGlmICh0by5saW5lICE9IG9sZFRvKSB0
byA9IHNraXBIaWRkZW4odG8sIG9sZFRvLCBzZWwudG8uY2gpOwotCi0gICAgICBpZiAocG9zRXEo
ZnJvbSwgdG8pKSBzZWwuaW52ZXJ0ZWQgPSBmYWxzZTsKLSAgICAgIGVsc2UgaWYgKHBvc0VxKGZy
b20sIHNlbC50bykpIHNlbC5pbnZlcnRlZCA9IGZhbHNlOwotICAgICAgZWxzZSBpZiAocG9zRXEo
dG8sIHNlbC5mcm9tKSkgc2VsLmludmVydGVkID0gdHJ1ZTsKLQotICAgICAgaWYgKG9wdGlvbnMu
YXV0b0NsZWFyRW1wdHlMaW5lcyAmJiBwb3NFcShzZWwuZnJvbSwgc2VsLnRvKSkgewotICAgICAg
ICB2YXIgaGVhZCA9IHNlbC5pbnZlcnRlZCA/IGZyb20gOiB0bzsKLSAgICAgICAgaWYgKGhlYWQu
bGluZSAhPSBzZWwuZnJvbS5saW5lICYmIHNlbC5mcm9tLmxpbmUgPCBkb2Muc2l6ZSkgewotICAg
ICAgICAgIHZhciBvbGRMaW5lID0gZ2V0TGluZShzZWwuZnJvbS5saW5lKTsKLSAgICAgICAgICBp
ZiAoL15ccyskLy50ZXN0KG9sZExpbmUudGV4dCkpCi0gICAgICAgICAgICBzZXRUaW1lb3V0KG9w
ZXJhdGlvbihmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgaWYgKG9sZExpbmUucGFyZW50ICYm
IC9eXHMrJC8udGVzdChvbGRMaW5lLnRleHQpKSB7Ci0gICAgICAgICAgICAgICAgdmFyIG5vID0g
bGluZU5vKG9sZExpbmUpOwotICAgICAgICAgICAgICAgIHJlcGxhY2VSYW5nZSgiIiwge2xpbmU6
IG5vLCBjaDogMH0sIHtsaW5lOiBubywgY2g6IG9sZExpbmUudGV4dC5sZW5ndGh9KTsKLSAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfSwgMTApKTsKLSAgICAgICAgfQotICAgICAgfQorICAv
LyBPUEVSQVRJT05TCisKKyAgLy8gT3BlcmF0aW9ucyBhcmUgdXNlZCB0byB3cmFwIGNoYW5nZXMg
aW4gc3VjaCBhIHdheSB0aGF0IGVhY2gKKyAgLy8gY2hhbmdlIHdvbid0IGhhdmUgdG8gdXBkYXRl
IHRoZSBjdXJzb3IgYW5kIGRpc3BsYXkgKHdoaWNoIHdvdWxkCisgIC8vIGJlIGF3a3dhcmQsIHNs
b3csIGFuZCBlcnJvci1wcm9uZSksIGJ1dCBpbnN0ZWFkIHVwZGF0ZXMgYXJlCisgIC8vIGJhdGNo
ZWQgYW5kIHRoZW4gYWxsIGNvbWJpbmVkIGFuZCBleGVjdXRlZCBhdCBvbmNlLgorCisgIGZ1bmN0
aW9uIHN0YXJ0T3BlcmF0aW9uKGNtKSB7CisgICAgaWYgKGNtLmN1ck9wKSArK2NtLmN1ck9wLmRl
cHRoOworICAgIGVsc2UgY20uY3VyT3AgPSB7CisgICAgICAvLyBOZXN0ZWQgb3BlcmF0aW9ucyBk
ZWxheSB1cGRhdGUgdW50aWwgdGhlIG91dGVybW9zdCBvbmUKKyAgICAgIC8vIGZpbmlzaGVzLgor
ICAgICAgZGVwdGg6IDEsCisgICAgICAvLyBBbiBhcnJheSBvZiByYW5nZXMgb2YgbGluZXMgdGhh
dCBoYXZlIHRvIGJlIHVwZGF0ZWQuIFNlZQorICAgICAgLy8gdXBkYXRlRGlzcGxheS4KKyAgICAg
IGNoYW5nZXM6IFtdLAorICAgICAgZGVsYXllZENhbGxiYWNrczogW10sCisgICAgICB1cGRhdGVJ
bnB1dDogbnVsbCwKKyAgICAgIHVzZXJTZWxDaGFuZ2U6IG51bGwsCisgICAgICB0ZXh0Q2hhbmdl
ZDogbnVsbCwKKyAgICAgIHNlbGVjdGlvbkNoYW5nZWQ6IGZhbHNlLAorICAgICAgdXBkYXRlTWF4
TGluZTogZmFsc2UKKyAgICB9OworICB9CiAKLSAgICAgIHNlbC5mcm9tID0gZnJvbTsgc2VsLnRv
ID0gdG87Ci0gICAgICBzZWxlY3Rpb25DaGFuZ2VkID0gdHJ1ZTsKKyAgZnVuY3Rpb24gZW5kT3Bl
cmF0aW9uKGNtKSB7CisgICAgdmFyIG9wID0gY20uY3VyT3A7CisgICAgaWYgKC0tb3AuZGVwdGgp
IHJldHVybjsKKyAgICBjbS5jdXJPcCA9IG51bGw7CisgICAgdmFyIHZpZXcgPSBjbS52aWV3LCBk
aXNwbGF5ID0gY20uZGlzcGxheTsKKyAgICBpZiAob3AudXBkYXRlTWF4TGluZSkgY29tcHV0ZU1h
eExlbmd0aCh2aWV3KTsKKyAgICBpZiAodmlldy5tYXhMaW5lQ2hhbmdlZCAmJiAhY20ub3B0aW9u
cy5saW5lV3JhcHBpbmcpIHsKKyAgICAgIHZhciB3aWR0aCA9IG1lYXN1cmVDaGFyKGNtLCB2aWV3
Lm1heExpbmUsIHZpZXcubWF4TGluZS50ZXh0Lmxlbmd0aCkucmlnaHQ7CisgICAgICBkaXNwbGF5
LnNpemVyLnN0eWxlLm1pbldpZHRoID0gKHdpZHRoICsgMyArIHNjcm9sbGVyQ3V0T2ZmKSArICJw
eCI7CisgICAgICB2aWV3Lm1heExpbmVDaGFuZ2VkID0gZmFsc2U7CiAgICAgfQotICAgIGZ1bmN0
aW9uIHNraXBIaWRkZW4ocG9zLCBvbGRMaW5lLCBvbGRDaCkgewotICAgICAgZnVuY3Rpb24gZ2V0
Tm9uSGlkZGVuKGRpcikgewotICAgICAgICB2YXIgbE5vID0gcG9zLmxpbmUgKyBkaXIsIGVuZCA9
IGRpciA9PSAxID8gZG9jLnNpemUgOiAtMTsKLSAgICAgICAgd2hpbGUgKGxObyAhPSBlbmQpIHsK
LSAgICAgICAgICB2YXIgbGluZSA9IGdldExpbmUobE5vKTsKLSAgICAgICAgICBpZiAoIWxpbmUu
aGlkZGVuKSB7Ci0gICAgICAgICAgICB2YXIgY2ggPSBwb3MuY2g7Ci0gICAgICAgICAgICBpZiAo
dG9FbmQgfHwgY2ggPiBvbGRDaCB8fCBjaCA+IGxpbmUudGV4dC5sZW5ndGgpIGNoID0gbGluZS50
ZXh0Lmxlbmd0aDsKLSAgICAgICAgICAgIHJldHVybiB7bGluZTogbE5vLCBjaDogY2h9OwotICAg
ICAgICAgIH0KLSAgICAgICAgICBsTm8gKz0gZGlyOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAg
ICB2YXIgbGluZSA9IGdldExpbmUocG9zLmxpbmUpOwotICAgICAgdmFyIHRvRW5kID0gcG9zLmNo
ID09IGxpbmUudGV4dC5sZW5ndGggJiYgcG9zLmNoICE9IG9sZENoOwotICAgICAgaWYgKCFsaW5l
LmhpZGRlbikgcmV0dXJuIHBvczsKLSAgICAgIGlmIChwb3MubGluZSA+PSBvbGRMaW5lKSByZXR1
cm4gZ2V0Tm9uSGlkZGVuKDEpIHx8IGdldE5vbkhpZGRlbigtMSk7Ci0gICAgICBlbHNlIHJldHVy
biBnZXROb25IaWRkZW4oLTEpIHx8IGdldE5vbkhpZGRlbigxKTsKLSAgICB9Ci0gICAgZnVuY3Rp
b24gc2V0Q3Vyc29yKGxpbmUsIGNoLCB1c2VyKSB7Ci0gICAgICB2YXIgcG9zID0gY2xpcFBvcyh7
bGluZTogbGluZSwgY2g6IGNoIHx8IDB9KTsKLSAgICAgICh1c2VyID8gc2V0U2VsZWN0aW9uVXNl
ciA6IHNldFNlbGVjdGlvbikocG9zLCBwb3MpOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIGNsaXBM
aW5lKG4pIHtyZXR1cm4gTWF0aC5tYXgoMCwgTWF0aC5taW4obiwgZG9jLnNpemUtMSkpO30KLSAg
ICBmdW5jdGlvbiBjbGlwUG9zKHBvcykgewotICAgICAgaWYgKHBvcy5saW5lIDwgMCkgcmV0dXJu
IHtsaW5lOiAwLCBjaDogMH07Ci0gICAgICBpZiAocG9zLmxpbmUgPj0gZG9jLnNpemUpIHJldHVy
biB7bGluZTogZG9jLnNpemUtMSwgY2g6IGdldExpbmUoZG9jLnNpemUtMSkudGV4dC5sZW5ndGh9
OwotICAgICAgdmFyIGNoID0gcG9zLmNoLCBsaW5lbGVuID0gZ2V0TGluZShwb3MubGluZSkudGV4
dC5sZW5ndGg7Ci0gICAgICBpZiAoY2ggPT0gbnVsbCB8fCBjaCA+IGxpbmVsZW4pIHJldHVybiB7
bGluZTogcG9zLmxpbmUsIGNoOiBsaW5lbGVufTsKLSAgICAgIGVsc2UgaWYgKGNoIDwgMCkgcmV0
dXJuIHtsaW5lOiBwb3MubGluZSwgY2g6IDB9OwotICAgICAgZWxzZSByZXR1cm4gcG9zOwotICAg
IH0KLQotICAgIGZ1bmN0aW9uIGZpbmRQb3NIKGRpciwgdW5pdCkgewotICAgICAgdmFyIGVuZCA9
IHNlbC5pbnZlcnRlZCA/IHNlbC5mcm9tIDogc2VsLnRvLCBsaW5lID0gZW5kLmxpbmUsIGNoID0g
ZW5kLmNoOwotICAgICAgdmFyIGxpbmVPYmogPSBnZXRMaW5lKGxpbmUpOwotICAgICAgZnVuY3Rp
b24gZmluZE5leHRMaW5lKCkgewotICAgICAgICBmb3IgKHZhciBsID0gbGluZSArIGRpciwgZSA9
IGRpciA8IDAgPyAtMSA6IGRvYy5zaXplOyBsICE9IGU7IGwgKz0gZGlyKSB7Ci0gICAgICAgICAg
dmFyIGxvID0gZ2V0TGluZShsKTsKLSAgICAgICAgICBpZiAoIWxvLmhpZGRlbikgeyBsaW5lID0g
bDsgbGluZU9iaiA9IGxvOyByZXR1cm4gdHJ1ZTsgfQotICAgICAgICB9CisgICAgdmFyIG5ld1Nj
cm9sbFBvcywgdXBkYXRlZDsKKyAgICBpZiAob3Auc2VsZWN0aW9uQ2hhbmdlZCkgeworICAgICAg
dmFyIGNvb3JkcyA9IGN1cnNvckNvb3JkcyhjbSwgc2VsSGVhZCh2aWV3KSk7CisgICAgICBuZXdT
Y3JvbGxQb3MgPSBjYWxjdWxhdGVTY3JvbGxQb3MoZGlzcGxheSwgY29vcmRzLmxlZnQsIGNvb3Jk
cy50b3AsIGNvb3Jkcy5sZWZ0LCBjb29yZHMuYm90dG9tKTsKKyAgICB9CisgICAgaWYgKG9wLmNo
YW5nZXMubGVuZ3RoIHx8IG5ld1Njcm9sbFBvcyAmJiBuZXdTY3JvbGxQb3Muc2Nyb2xsVG9wICE9
IG51bGwpCisgICAgICB1cGRhdGVkID0gdXBkYXRlRGlzcGxheShjbSwgb3AuY2hhbmdlcywgbmV3
U2Nyb2xsUG9zICYmIG5ld1Njcm9sbFBvcy5zY3JvbGxUb3ApOworICAgIGlmICghdXBkYXRlZCAm
JiBvcC5zZWxlY3Rpb25DaGFuZ2VkKSB1cGRhdGVTZWxlY3Rpb24oY20pOworICAgIGlmIChuZXdT
Y3JvbGxQb3MpIHNjcm9sbEN1cnNvckludG9WaWV3KGNtKTsKKyAgICBpZiAob3Auc2VsZWN0aW9u
Q2hhbmdlZCkgcmVzdGFydEJsaW5rKGNtKTsKKworICAgIGlmICh2aWV3LmZvY3VzZWQgJiYgb3Au
dXBkYXRlSW5wdXQpCisgICAgICByZXNldElucHV0KGNtLCBvcC51c2VyU2VsQ2hhbmdlKTsKKwor
ICAgIGlmIChvcC50ZXh0Q2hhbmdlZCkKKyAgICAgIHNpZ25hbChjbSwgImNoYW5nZSIsIGNtLCBv
cC50ZXh0Q2hhbmdlZCk7CisgICAgaWYgKG9wLnNlbGVjdGlvbkNoYW5nZWQpIHNpZ25hbChjbSwg
ImN1cnNvckFjdGl2aXR5IiwgY20pOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3AuZGVsYXll
ZENhbGxiYWNrcy5sZW5ndGg7ICsraSkgb3AuZGVsYXllZENhbGxiYWNrc1tpXShjbSk7CisgIH0K
KworICAvLyBXcmFwcyBhIGZ1bmN0aW9uIGluIGFuIG9wZXJhdGlvbi4gUmV0dXJucyB0aGUgd3Jh
cHBlZCBmdW5jdGlvbi4KKyAgZnVuY3Rpb24gb3BlcmF0aW9uKGNtMSwgZikgeworICAgIHJldHVy
biBmdW5jdGlvbigpIHsKKyAgICAgIHZhciBjbSA9IGNtMSB8fCB0aGlzOworICAgICAgc3RhcnRP
cGVyYXRpb24oY20pOworICAgICAgdHJ5IHt2YXIgcmVzdWx0ID0gZi5hcHBseShjbSwgYXJndW1l
bnRzKTt9CisgICAgICBmaW5hbGx5IHtlbmRPcGVyYXRpb24oY20pO30KKyAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfTsKKyAgfQorCisgIGZ1bmN0aW9uIHJlZ0NoYW5nZShjbSwgZnJvbSwgdG8s
IGxlbmRpZmYpIHsKKyAgICBjbS5jdXJPcC5jaGFuZ2VzLnB1c2goe2Zyb206IGZyb20sIHRvOiB0
bywgZGlmZjogbGVuZGlmZn0pOworICB9CisKKyAgLy8gSU5QVVQgSEFORExJTkcKKworICBmdW5j
dGlvbiBzbG93UG9sbChjbSkgeworICAgIGlmIChjbS52aWV3LnBvbGxpbmdGYXN0KSByZXR1cm47
CisgICAgY20uZGlzcGxheS5wb2xsLnNldChjbS5vcHRpb25zLnBvbGxJbnRlcnZhbCwgZnVuY3Rp
b24oKSB7CisgICAgICByZWFkSW5wdXQoY20pOworICAgICAgaWYgKGNtLnZpZXcuZm9jdXNlZCkg
c2xvd1BvbGwoY20pOworICAgIH0pOworICB9CisKKyAgZnVuY3Rpb24gZmFzdFBvbGwoY20pIHsK
KyAgICB2YXIgbWlzc2VkID0gZmFsc2U7CisgICAgY20uZGlzcGxheS5wb2xsaW5nRmFzdCA9IHRy
dWU7CisgICAgZnVuY3Rpb24gcCgpIHsKKyAgICAgIHZhciBjaGFuZ2VkID0gcmVhZElucHV0KGNt
KTsKKyAgICAgIGlmICghY2hhbmdlZCAmJiAhbWlzc2VkKSB7bWlzc2VkID0gdHJ1ZTsgY20uZGlz
cGxheS5wb2xsLnNldCg2MCwgcCk7fQorICAgICAgZWxzZSB7Y20uZGlzcGxheS5wb2xsaW5nRmFz
dCA9IGZhbHNlOyBzbG93UG9sbChjbSk7fQorICAgIH0KKyAgICBjbS5kaXNwbGF5LnBvbGwuc2V0
KDIwLCBwKTsKKyAgfQorCisgIC8vIHByZXZJbnB1dCBpcyBhIGhhY2sgdG8gd29yayB3aXRoIElN
RS4gSWYgd2UgcmVzZXQgdGhlIHRleHRhcmVhCisgIC8vIG9uIGV2ZXJ5IGNoYW5nZSwgdGhhdCBi
cmVha3MgSU1FLiBTbyB3ZSBsb29rIGZvciBjaGFuZ2VzCisgIC8vIGNvbXBhcmVkIHRvIHRoZSBw
cmV2aW91cyBjb250ZW50IGluc3RlYWQuIChNb2Rlcm4gYnJvd3NlcnMgaGF2ZQorICAvLyBldmVu
dHMgdGhhdCBpbmRpY2F0ZSBJTUUgdGFraW5nIHBsYWNlLCBidXQgdGhlc2UgYXJlIG5vdCB3aWRl
bHkKKyAgLy8gc3VwcG9ydGVkIG9yIGNvbXBhdGlibGUgZW5vdWdoIHlldCB0byByZWx5IG9uLikK
KyAgZnVuY3Rpb24gcmVhZElucHV0KGNtKSB7CisgICAgdmFyIGlucHV0ID0gY20uZGlzcGxheS5p
bnB1dCwgcHJldklucHV0ID0gY20uZGlzcGxheS5wcmV2SW5wdXQsIHZpZXcgPSBjbS52aWV3LCBz
ZWwgPSB2aWV3LnNlbDsKKyAgICBpZiAoIXZpZXcuZm9jdXNlZCB8fCBoYXNTZWxlY3Rpb24oaW5w
dXQpIHx8IGlzUmVhZE9ubHkoY20pKSByZXR1cm4gZmFsc2U7CisgICAgdmFyIHRleHQgPSBpbnB1
dC52YWx1ZTsKKyAgICBpZiAodGV4dCA9PSBwcmV2SW5wdXQgJiYgcG9zRXEoc2VsLmZyb20sIHNl
bC50bykpIHJldHVybiBmYWxzZTsKKyAgICBzdGFydE9wZXJhdGlvbihjbSk7CisgICAgdmlldy5z
ZWwuc2hpZnQgPSBudWxsOworICAgIHZhciBzYW1lID0gMCwgbCA9IE1hdGgubWluKHByZXZJbnB1
dC5sZW5ndGgsIHRleHQubGVuZ3RoKTsKKyAgICB3aGlsZSAoc2FtZSA8IGwgJiYgcHJldklucHV0
W3NhbWVdID09IHRleHRbc2FtZV0pICsrc2FtZTsKKyAgICBpZiAoc2FtZSA8IHByZXZJbnB1dC5s
ZW5ndGgpCisgICAgICBzZWwuZnJvbSA9IHtsaW5lOiBzZWwuZnJvbS5saW5lLCBjaDogc2VsLmZy
b20uY2ggLSAocHJldklucHV0Lmxlbmd0aCAtIHNhbWUpfTsKKyAgICBlbHNlIGlmICh2aWV3Lm92
ZXJ3cml0ZSAmJiBwb3NFcShzZWwuZnJvbSwgc2VsLnRvKSAmJiAhY20uZGlzcGxheS5wYXN0ZUlu
Y29taW5nKQorICAgICAgc2VsLnRvID0ge2xpbmU6IHNlbC50by5saW5lLCBjaDogTWF0aC5taW4o
Z2V0TGluZShjbS52aWV3LmRvYywgc2VsLnRvLmxpbmUpLnRleHQubGVuZ3RoLCBzZWwudG8uY2gg
KyAodGV4dC5sZW5ndGggLSBzYW1lKSl9OworICAgIHZhciB1cGRhdGVJbnB1dCA9IGNtLmN1ck9w
LnVwZGF0ZUlucHV0OworICAgIGNtLnJlcGxhY2VTZWxlY3Rpb24odGV4dC5zbGljZShzYW1lKSwg
ImVuZCIpOworICAgIGNtLmN1ck9wLnVwZGF0ZUlucHV0ID0gdXBkYXRlSW5wdXQ7CisgICAgaWYg
KHRleHQubGVuZ3RoID4gMTAwMCkgeyBpbnB1dC52YWx1ZSA9IGNtLmRpc3BsYXkucHJldklucHV0
ID0gIiI7IH0KKyAgICBlbHNlIGNtLmRpc3BsYXkucHJldklucHV0ID0gdGV4dDsKKyAgICBlbmRP
cGVyYXRpb24oY20pOworICAgIGNtLmRpc3BsYXkucGFzdGVJbmNvbWluZyA9IGZhbHNlOworICAg
IHJldHVybiB0cnVlOworICB9CisKKyAgZnVuY3Rpb24gcmVzZXRJbnB1dChjbSwgdXNlcikgewor
ICAgIHZhciB2aWV3ID0gY20udmlldywgbWluaW1hbCwgc2VsZWN0ZWQ7CisgICAgaWYgKCFwb3NF
cSh2aWV3LnNlbC5mcm9tLCB2aWV3LnNlbC50bykpIHsKKyAgICAgIGNtLmRpc3BsYXkucHJldklu
cHV0ID0gIiI7CisgICAgICBtaW5pbWFsID0gaGFzQ29weUV2ZW50ICYmCisgICAgICAgICh2aWV3
LnNlbC50by5saW5lIC0gdmlldy5zZWwuZnJvbS5saW5lID4gMTAwIHx8IChzZWxlY3RlZCA9IGNt
LmdldFNlbGVjdGlvbigpKS5sZW5ndGggPiAxMDAwKTsKKyAgICAgIGlmIChtaW5pbWFsKSBjbS5k
aXNwbGF5LmlucHV0LnZhbHVlID0gIi0iOworICAgICAgZWxzZSBjbS5kaXNwbGF5LmlucHV0LnZh
bHVlID0gc2VsZWN0ZWQgfHwgY20uZ2V0U2VsZWN0aW9uKCk7CisgICAgICBpZiAodmlldy5mb2N1
c2VkKSBzZWxlY3RJbnB1dChjbS5kaXNwbGF5LmlucHV0KTsKKyAgICB9IGVsc2UgaWYgKHVzZXIp
IGNtLmRpc3BsYXkucHJldklucHV0ID0gY20uZGlzcGxheS5pbnB1dC52YWx1ZSA9ICIiOworICAg
IGNtLmRpc3BsYXkuaW5hY2N1cmF0ZVNlbGVjdGlvbiA9IG1pbmltYWw7CisgIH0KKworICBmdW5j
dGlvbiBmb2N1c0lucHV0KGNtKSB7CisgICAgaWYgKGNtLm9wdGlvbnMucmVhZE9ubHkgIT0gIm5v
Y3Vyc29yIikgY20uZGlzcGxheS5pbnB1dC5mb2N1cygpOworICB9CisKKyAgZnVuY3Rpb24gaXNS
ZWFkT25seShjbSkgeworICAgIHJldHVybiBjbS5vcHRpb25zLnJlYWRPbmx5IHx8IGNtLnZpZXcu
Y2FudEVkaXQ7CisgIH0KKworICAvLyBFVkVOVCBIQU5ETEVSUworCisgIGZ1bmN0aW9uIHJlZ2lz
dGVyRXZlbnRIYW5kbGVycyhjbSkgeworICAgIHZhciBkID0gY20uZGlzcGxheTsKKyAgICBvbihk
LnNjcm9sbGVyLCAibW91c2Vkb3duIiwgb3BlcmF0aW9uKGNtLCBvbk1vdXNlRG93bikpOworICAg
IG9uKGQuZ3V0dGVycywgIm1vdXNlZG93biIsIG9wZXJhdGlvbihjbSwgY2xpY2tJbkd1dHRlcikp
OworICAgIG9uKGQuc2Nyb2xsZXIsICJkYmxjbGljayIsIG9wZXJhdGlvbihjbSwgZV9wcmV2ZW50
RGVmYXVsdCkpOworICAgIG9uKGQubGluZVNwYWNlLCAic2VsZWN0c3RhcnQiLCBmdW5jdGlvbihl
KSB7CisgICAgICBpZiAoIW1vdXNlRXZlbnRJbldpZGdldChkLCBlKSkgZV9wcmV2ZW50RGVmYXVs
dChlKTsKKyAgICB9KTsKKyAgICAvLyBHZWNrbyBicm93c2VycyBmaXJlIGNvbnRleHRtZW51ICph
ZnRlciogb3BlbmluZyB0aGUgbWVudSwgYXQKKyAgICAvLyB3aGljaCBwb2ludCB3ZSBjYW4ndCBt
ZXNzIHdpdGggaXQgYW55bW9yZS4gQ29udGV4dCBtZW51IGlzCisgICAgLy8gaGFuZGxlZCBpbiBv
bk1vdXNlRG93biBmb3IgR2Vja28uCisgICAgaWYgKCFnZWNrbykgb24oZC5zY3JvbGxlciwgImNv
bnRleHRtZW51IiwgZnVuY3Rpb24oZSkge29uQ29udGV4dE1lbnUoY20sIGUpO30pOworCisgICAg
b24oZC5zY3JvbGxlciwgInNjcm9sbCIsIGZ1bmN0aW9uKCkgeworICAgICAgc2V0U2Nyb2xsVG9w
KGNtLCBkLnNjcm9sbGVyLnNjcm9sbFRvcCk7CisgICAgICBzZXRTY3JvbGxMZWZ0KGNtLCBkLnNj
cm9sbGVyLnNjcm9sbExlZnQpOworICAgICAgc2lnbmFsKGNtLCAic2Nyb2xsIiwgY20pOworICAg
IH0pOworICAgIG9uKGQuc2Nyb2xsYmFyViwgInNjcm9sbCIsIGZ1bmN0aW9uKCkgeworICAgICAg
c2V0U2Nyb2xsVG9wKGNtLCBkLnNjcm9sbGJhclYuc2Nyb2xsVG9wKTsKKyAgICB9KTsKKyAgICBv
bihkLnNjcm9sbGJhckgsICJzY3JvbGwiLCBmdW5jdGlvbigpIHsKKyAgICAgIHNldFNjcm9sbExl
ZnQoY20sIGQuc2Nyb2xsYmFySC5zY3JvbGxMZWZ0KTsKKyAgICB9KTsKKworICAgIG9uKGQuc2Ny
b2xsZXIsICJtb3VzZXdoZWVsIiwgZnVuY3Rpb24oZSl7b25TY3JvbGxXaGVlbChjbSwgZSk7fSk7
CisgICAgb24oZC5zY3JvbGxlciwgIkRPTU1vdXNlU2Nyb2xsIiwgZnVuY3Rpb24oZSl7b25TY3Jv
bGxXaGVlbChjbSwgZSk7fSk7CisKKyAgICBmdW5jdGlvbiByZUZvY3VzKCkgeyBpZiAoY20udmll
dy5mb2N1c2VkKSBzZXRUaW1lb3V0KGJpbmQoZm9jdXNJbnB1dCwgY20pLCAwKTsgfQorICAgIG9u
KGQuc2Nyb2xsYmFySCwgIm1vdXNlZG93biIsIHJlRm9jdXMpOworICAgIG9uKGQuc2Nyb2xsYmFy
ViwgIm1vdXNlZG93biIsIHJlRm9jdXMpOworICAgIC8vIFByZXZlbnQgd3JhcHBlciBmcm9tIGV2
ZXIgc2Nyb2xsaW5nCisgICAgb24oZC53cmFwcGVyLCAic2Nyb2xsIiwgZnVuY3Rpb24oKSB7IGQu
d3JhcHBlci5zY3JvbGxUb3AgPSBkLndyYXBwZXIuc2Nyb2xsTGVmdCA9IDA7IH0pOworICAgIG9u
KHdpbmRvdywgInJlc2l6ZSIsIGZ1bmN0aW9uIHJlc2l6ZUhhbmRsZXIoKSB7CisgICAgICAvLyBN
aWdodCBiZSBhIHRleHQgc2NhbGluZyBvcGVyYXRpb24sIGNsZWFyIHNpemUgY2FjaGVzLgorICAg
ICAgZC5jYWNoZWRDaGFyV2lkdGggPSBkLmNhY2hlZFRleHRIZWlnaHQgPSBudWxsOworICAgICAg
ZC5tZWFzdXJlTGluZUNhY2hlLmxlbmd0aCA9IGQubWVhc3VyZUxpbmVDYWNoZS5wb3MgPSAwOwor
ICAgICAgaWYgKGQud3JhcHBlci5wYXJlbnROb2RlKSB1cGRhdGVEaXNwbGF5KGNtLCB0cnVlKTsK
KyAgICAgIGVsc2Ugb2ZmKHdpbmRvdywgInJlc2l6ZSIsIHJlc2l6ZUhhbmRsZXIpOworICAgIH0p
OworCisgICAgb24oZC5pbnB1dCwgImtleXVwIiwgb3BlcmF0aW9uKGNtLCBmdW5jdGlvbihlKSB7
CisgICAgICBpZiAoY20ub3B0aW9ucy5vbktleUV2ZW50ICYmIGNtLm9wdGlvbnMub25LZXlFdmVu
dChjbSwgYWRkU3RvcChlKSkpIHJldHVybjsKKyAgICAgIGlmIChlX3Byb3AoZSwgImtleUNvZGUi
KSA9PSAxNikgY20udmlldy5zZWwuc2hpZnQgPSBudWxsOworICAgIH0pKTsKKyAgICBvbihkLmlu
cHV0LCAiaW5wdXQiLCBiaW5kKGZhc3RQb2xsLCBjbSkpOworICAgIG9uKGQuaW5wdXQsICJrZXlk
b3duIiwgb3BlcmF0aW9uKGNtLCBvbktleURvd24pKTsKKyAgICBvbihkLmlucHV0LCAia2V5cHJl
c3MiLCBvcGVyYXRpb24oY20sIG9uS2V5UHJlc3MpKTsKKyAgICBvbihkLmlucHV0LCAiZm9jdXMi
LCBiaW5kKG9uRm9jdXMsIGNtKSk7CisgICAgb24oZC5pbnB1dCwgImJsdXIiLCBiaW5kKG9uQmx1
ciwgY20pKTsKKworICAgIGZ1bmN0aW9uIGRyYWdfKGUpIHsKKyAgICAgIGlmIChjbS5vcHRpb25z
Lm9uRHJhZ0V2ZW50ICYmIGNtLm9wdGlvbnMub25EcmFnRXZlbnQoY20sIGFkZFN0b3AoZSkpKSBy
ZXR1cm47CisgICAgICBlX3N0b3AoZSk7CisgICAgfQorICAgIGlmIChjbS5vcHRpb25zLmRyYWdE
cm9wKSB7CisgICAgICBvbihkLnNjcm9sbGVyLCAiZHJhZ3N0YXJ0IiwgZnVuY3Rpb24oZSl7b25E
cmFnU3RhcnQoY20sIGUpO30pOworICAgICAgb24oZC5zY3JvbGxlciwgImRyYWdlbnRlciIsIGRy
YWdfKTsKKyAgICAgIG9uKGQuc2Nyb2xsZXIsICJkcmFnb3ZlciIsIGRyYWdfKTsKKyAgICAgIG9u
KGQuc2Nyb2xsZXIsICJkcm9wIiwgb3BlcmF0aW9uKGNtLCBvbkRyb3ApKTsKKyAgICB9CisgICAg
b24oZC5zY3JvbGxlciwgInBhc3RlIiwgZnVuY3Rpb24oKXtmb2N1c0lucHV0KGNtKTsgZmFzdFBv
bGwoY20pO30pOworICAgIG9uKGQuaW5wdXQsICJwYXN0ZSIsIGZ1bmN0aW9uKCkgeworICAgICAg
ZC5wYXN0ZUluY29taW5nID0gdHJ1ZTsKKyAgICAgIGZhc3RQb2xsKGNtKTsKKyAgICB9KTsKKwor
ICAgIGZ1bmN0aW9uIHByZXBhcmVDb3B5KCkgeworICAgICAgaWYgKGQuaW5hY2N1cmF0ZVNlbGVj
dGlvbikgeworICAgICAgICBkLnByZXZJbnB1dCA9ICIiOworICAgICAgICBkLmluYWNjdXJhdGVT
ZWxlY3Rpb24gPSBmYWxzZTsKKyAgICAgICAgZC5pbnB1dC52YWx1ZSA9IGNtLmdldFNlbGVjdGlv
bigpOworICAgICAgICBzZWxlY3RJbnB1dChkLmlucHV0KTsKICAgICAgIH0KLSAgICAgIGZ1bmN0
aW9uIG1vdmVPbmNlKGJvdW5kVG9MaW5lKSB7Ci0gICAgICAgIGlmIChjaCA9PSAoZGlyIDwgMCA/
IDAgOiBsaW5lT2JqLnRleHQubGVuZ3RoKSkgewotICAgICAgICAgIGlmICghYm91bmRUb0xpbmUg
JiYgZmluZE5leHRMaW5lKCkpIGNoID0gZGlyIDwgMCA/IGxpbmVPYmoudGV4dC5sZW5ndGggOiAw
OwotICAgICAgICAgIGVsc2UgcmV0dXJuIGZhbHNlOwotICAgICAgICB9IGVsc2UgY2ggKz0gZGly
OwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgb24oZC5pbnB1dCwgImN1dCIsIHBy
ZXBhcmVDb3B5KTsKKyAgICBvbihkLmlucHV0LCAiY29weSIsIHByZXBhcmVDb3B5KTsKKworICAg
IC8vIE5lZWRlZCB0byBoYW5kbGUgVGFiIGtleSBpbiBLSFRNTAorICAgIGlmIChraHRtbCkgb24o
ZC5zaXplciwgIm1vdXNldXAiLCBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKGRvY3VtZW50LmFj
dGl2ZUVsZW1lbnQgPT0gZC5pbnB1dCkgZC5pbnB1dC5ibHVyKCk7CisgICAgICAgIGZvY3VzSW5w
dXQoY20pOworICAgIH0pOworICB9CisKKyAgZnVuY3Rpb24gbW91c2VFdmVudEluV2lkZ2V0KGRp
c3BsYXksIGUpIHsKKyAgICBmb3IgKHZhciBuID0gZV90YXJnZXQoZSk7IG4gIT0gZGlzcGxheS53
cmFwcGVyOyBuID0gbi5wYXJlbnROb2RlKQorICAgICAgaWYgKC9cYkNvZGVNaXJyb3ItKD86bGlu
ZSk/d2lkZ2V0XGIvLnRlc3Qobi5jbGFzc05hbWUpIHx8CisgICAgICAgICAgbi5wYXJlbnROb2Rl
ID09IGRpc3BsYXkuc2l6ZXIgJiYgbiAhPSBkaXNwbGF5Lm1vdmVyKSByZXR1cm4gdHJ1ZTsKKyAg
fQorCisgIGZ1bmN0aW9uIHBvc0Zyb21Nb3VzZShjbSwgZSwgbGliZXJhbCkgeworICAgIHZhciBk
aXNwbGF5ID0gY20uZGlzcGxheTsKKyAgICBpZiAoIWxpYmVyYWwpIHsKKyAgICAgIHZhciB0YXJn
ZXQgPSBlX3RhcmdldChlKTsKKyAgICAgIGlmICh0YXJnZXQgPT0gZGlzcGxheS5zY3JvbGxiYXJI
IHx8IHRhcmdldCA9PSBkaXNwbGF5LnNjcm9sbGJhckguZmlyc3RDaGlsZCB8fAorICAgICAgICAg
IHRhcmdldCA9PSBkaXNwbGF5LnNjcm9sbGJhclYgfHwgdGFyZ2V0ID09IGRpc3BsYXkuc2Nyb2xs
YmFyVi5maXJzdENoaWxkIHx8CisgICAgICAgICAgdGFyZ2V0ID09IGRpc3BsYXkuc2Nyb2xsYmFy
RmlsbGVyKSByZXR1cm4gbnVsbDsKKyAgICB9CisgICAgdmFyIHgsIHksIHNwYWNlID0gZGlzcGxh
eS5saW5lU3BhY2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CisgICAgLy8gRmFpbHMgdW5wcmVk
aWN0YWJseSBvbiBJRVs2N10gd2hlbiBtb3VzZSBpcyBkcmFnZ2VkIGFyb3VuZCBxdWlja2x5Lgor
ICAgIHRyeSB7IHggPSBlLmNsaWVudFg7IHkgPSBlLmNsaWVudFk7IH0gY2F0Y2ggKGUpIHsgcmV0
dXJuIG51bGw7IH0KKyAgICByZXR1cm4gY29vcmRzQ2hhcihjbSwgeCAtIHNwYWNlLmxlZnQsIHkg
LSBzcGFjZS50b3ApOworICB9CisKKyAgdmFyIGxhc3RDbGljaywgbGFzdERvdWJsZUNsaWNrOwor
ICBmdW5jdGlvbiBvbk1vdXNlRG93bihlKSB7CisgICAgdmFyIGNtID0gdGhpcywgZGlzcGxheSA9
IGNtLmRpc3BsYXksIHZpZXcgPSBjbS52aWV3LCBzZWwgPSB2aWV3LnNlbCwgZG9jID0gdmlldy5k
b2M7CisgICAgc2V0U2hpZnQoY20udmlldywgZV9wcm9wKGUsICJzaGlmdEtleSIpKTsKKworICAg
IGlmIChtb3VzZUV2ZW50SW5XaWRnZXQoZGlzcGxheSwgZSkpIHsKKyAgICAgIGlmICghd2Via2l0
KSB7CisgICAgICAgIGRpc3BsYXkuc2Nyb2xsZXIuZHJhZ2dhYmxlID0gZmFsc2U7CisgICAgICAg
IHNldFRpbWVvdXQoZnVuY3Rpb24oKXtkaXNwbGF5LnNjcm9sbGVyLmRyYWdnYWJsZSA9IHRydWU7
fSwgMTAwKTsKICAgICAgIH0KLSAgICAgIGlmICh1bml0ID09ICJjaGFyIikgbW92ZU9uY2UoKTsK
LSAgICAgIGVsc2UgaWYgKHVuaXQgPT0gImNvbHVtbiIpIG1vdmVPbmNlKHRydWUpOwotICAgICAg
ZWxzZSBpZiAodW5pdCA9PSAid29yZCIpIHsKLSAgICAgICAgdmFyIHNhd1dvcmQgPSBmYWxzZTsK
LSAgICAgICAgZm9yICg7OykgewotICAgICAgICAgIGlmIChkaXIgPCAwKSBpZiAoIW1vdmVPbmNl
KCkpIGJyZWFrOwotICAgICAgICAgIGlmIChpc1dvcmRDaGFyKGxpbmVPYmoudGV4dC5jaGFyQXQo
Y2gpKSkgc2F3V29yZCA9IHRydWU7Ci0gICAgICAgICAgZWxzZSBpZiAoc2F3V29yZCkge2lmIChk
aXIgPCAwKSB7ZGlyID0gMTsgbW92ZU9uY2UoKTt9IGJyZWFrO30KLSAgICAgICAgICBpZiAoZGly
ID4gMCkgaWYgKCFtb3ZlT25jZSgpKSBicmVhazsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAg
aWYgKGNsaWNrSW5HdXR0ZXIuY2FsbChjbSwgZSkpIHJldHVybjsKKyAgICB2YXIgc3RhcnQgPSBw
b3NGcm9tTW91c2UoY20sIGUpOworCisgICAgc3dpdGNoIChlX2J1dHRvbihlKSkgeworICAgIGNh
c2UgMzoKKyAgICAgIGlmIChnZWNrbykgb25Db250ZXh0TWVudS5jYWxsKGNtLCBjbSwgZSk7Cisg
ICAgICByZXR1cm47CisgICAgY2FzZSAyOgorICAgICAgaWYgKHN0YXJ0KSBzZXRTZWxlY3Rpb25V
c2VyKGNtLCBzdGFydCwgc3RhcnQpOworICAgICAgc2V0VGltZW91dChiaW5kKGZvY3VzSW5wdXQs
IGNtKSwgMjApOworICAgICAgZV9wcmV2ZW50RGVmYXVsdChlKTsKKyAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgLy8gRm9yIGJ1dHRvbiAxLCBpZiBpdCB3YXMgY2xpY2tlZCBpbnNpZGUgdGhlIGVk
aXRvcgorICAgIC8vIChwb3NGcm9tTW91c2UgcmV0dXJuaW5nIG5vbi1udWxsKSwgd2UgaGF2ZSB0
byBhZGp1c3QgdGhlCisgICAgLy8gc2VsZWN0aW9uLgorICAgIGlmICghc3RhcnQpIHtpZiAoZV90
YXJnZXQoZSkgPT0gZGlzcGxheS5zY3JvbGxlcikgZV9wcmV2ZW50RGVmYXVsdChlKTsgcmV0dXJu
O30KKworICAgIGlmICghdmlldy5mb2N1c2VkKSBvbkZvY3VzKGNtKTsKKworICAgIHZhciBub3cg
PSArbmV3IERhdGUsIHR5cGUgPSAic2luZ2xlIjsKKyAgICBpZiAobGFzdERvdWJsZUNsaWNrICYm
IGxhc3REb3VibGVDbGljay50aW1lID4gbm93IC0gNDAwICYmIHBvc0VxKGxhc3REb3VibGVDbGlj
ay5wb3MsIHN0YXJ0KSkgeworICAgICAgdHlwZSA9ICJ0cmlwbGUiOworICAgICAgZV9wcmV2ZW50
RGVmYXVsdChlKTsKKyAgICAgIHNldFRpbWVvdXQoYmluZChmb2N1c0lucHV0LCBjbSksIDIwKTsK
KyAgICAgIHNlbGVjdExpbmUoY20sIHN0YXJ0LmxpbmUpOworICAgIH0gZWxzZSBpZiAobGFzdENs
aWNrICYmIGxhc3RDbGljay50aW1lID4gbm93IC0gNDAwICYmIHBvc0VxKGxhc3RDbGljay5wb3Ms
IHN0YXJ0KSkgeworICAgICAgdHlwZSA9ICJkb3VibGUiOworICAgICAgbGFzdERvdWJsZUNsaWNr
ID0ge3RpbWU6IG5vdywgcG9zOiBzdGFydH07CisgICAgICBlX3ByZXZlbnREZWZhdWx0KGUpOwor
ICAgICAgdmFyIHdvcmQgPSBmaW5kV29yZEF0KGdldExpbmUoZG9jLCBzdGFydC5saW5lKS50ZXh0
LCBzdGFydCk7CisgICAgICBzZXRTZWxlY3Rpb25Vc2VyKGNtLCB3b3JkLmZyb20sIHdvcmQudG8p
OworICAgIH0gZWxzZSB7IGxhc3RDbGljayA9IHt0aW1lOiBub3csIHBvczogc3RhcnR9OyB9CisK
KyAgICB2YXIgbGFzdCA9IHN0YXJ0OworICAgIGlmIChjbS5vcHRpb25zLmRyYWdEcm9wICYmIGRy
YWdBbmREcm9wICYmICFpc1JlYWRPbmx5KGNtKSAmJiAhcG9zRXEoc2VsLmZyb20sIHNlbC50bykg
JiYKKyAgICAgICAgIXBvc0xlc3Moc3RhcnQsIHNlbC5mcm9tKSAmJiAhcG9zTGVzcyhzZWwudG8s
IHN0YXJ0KSAmJiB0eXBlID09ICJzaW5nbGUiKSB7CisgICAgICB2YXIgZHJhZ0VuZCA9IG9wZXJh
dGlvbihjbSwgZnVuY3Rpb24oZTIpIHsKKyAgICAgICAgaWYgKHdlYmtpdCkgZGlzcGxheS5zY3Jv
bGxlci5kcmFnZ2FibGUgPSBmYWxzZTsKKyAgICAgICAgdmlldy5kcmFnZ2luZ1RleHQgPSBmYWxz
ZTsKKyAgICAgICAgb2ZmKGRvY3VtZW50LCAibW91c2V1cCIsIGRyYWdFbmQpOworICAgICAgICBv
ZmYoZGlzcGxheS5zY3JvbGxlciwgImRyb3AiLCBkcmFnRW5kKTsKKyAgICAgICAgaWYgKE1hdGgu
YWJzKGUuY2xpZW50WCAtIGUyLmNsaWVudFgpICsgTWF0aC5hYnMoZS5jbGllbnRZIC0gZTIuY2xp
ZW50WSkgPCAxMCkgeworICAgICAgICAgIGVfcHJldmVudERlZmF1bHQoZTIpOworICAgICAgICAg
IHNldFNlbGVjdGlvblVzZXIoY20sIHN0YXJ0LCBzdGFydCk7CisgICAgICAgICAgZm9jdXNJbnB1
dChjbSk7CiAgICAgICAgIH0KKyAgICAgIH0pOworICAgICAgLy8gTGV0IHRoZSBkcmFnIGhhbmRs
ZXIgaGFuZGxlIHRoaXMuCisgICAgICBpZiAod2Via2l0KSBkaXNwbGF5LnNjcm9sbGVyLmRyYWdn
YWJsZSA9IHRydWU7CisgICAgICB2aWV3LmRyYWdnaW5nVGV4dCA9IGRyYWdFbmQ7CisgICAgICAv
LyBJRSdzIGFwcHJvYWNoIHRvIGRyYWdnYWJsZQorICAgICAgaWYgKGRpc3BsYXkuc2Nyb2xsZXIu
ZHJhZ0Ryb3ApIGRpc3BsYXkuc2Nyb2xsZXIuZHJhZ0Ryb3AoKTsKKyAgICAgIG9uKGRvY3VtZW50
LCAibW91c2V1cCIsIGRyYWdFbmQpOworICAgICAgb24oZGlzcGxheS5zY3JvbGxlciwgImRyb3Ai
LCBkcmFnRW5kKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgZV9wcmV2ZW50RGVmYXVsdChl
KTsKKyAgICBpZiAodHlwZSA9PSAic2luZ2xlIikgc2V0U2VsZWN0aW9uVXNlcihjbSwgc3RhcnQs
IHN0YXJ0KTsKKworICAgIHZhciBzdGFydHN0YXJ0ID0gc2VsLmZyb20sIHN0YXJ0ZW5kID0gc2Vs
LnRvOworCisgICAgZnVuY3Rpb24gZG9TZWxlY3QoY3VyKSB7CisgICAgICBpZiAodHlwZSA9PSAi
c2luZ2xlIikgeworICAgICAgICBzZXRTZWxlY3Rpb25Vc2VyKGNtLCBzdGFydCwgY3VyKTsKKyAg
ICAgIH0gZWxzZSBpZiAodHlwZSA9PSAiZG91YmxlIikgeworICAgICAgICB2YXIgd29yZCA9IGZp
bmRXb3JkQXQoZ2V0TGluZShkb2MsIGN1ci5saW5lKS50ZXh0LCBjdXIpOworICAgICAgICBpZiAo
cG9zTGVzcyhjdXIsIHN0YXJ0c3RhcnQpKSBzZXRTZWxlY3Rpb25Vc2VyKGNtLCB3b3JkLmZyb20s
IHN0YXJ0ZW5kKTsKKyAgICAgICAgZWxzZSBzZXRTZWxlY3Rpb25Vc2VyKGNtLCBzdGFydHN0YXJ0
LCB3b3JkLnRvKTsKKyAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSAidHJpcGxlIikgeworICAgICAg
ICBpZiAocG9zTGVzcyhjdXIsIHN0YXJ0c3RhcnQpKSBzZXRTZWxlY3Rpb25Vc2VyKGNtLCBzdGFy
dGVuZCwgY2xpcFBvcyhkb2MsIHtsaW5lOiBjdXIubGluZSwgY2g6IDB9KSk7CisgICAgICAgIGVs
c2Ugc2V0U2VsZWN0aW9uVXNlcihjbSwgc3RhcnRzdGFydCwgY2xpcFBvcyhkb2MsIHtsaW5lOiBj
dXIubGluZSArIDEsIGNoOiAwfSkpOwogICAgICAgfQotICAgICAgcmV0dXJuIHtsaW5lOiBsaW5l
LCBjaDogY2h9OwogICAgIH0KLSAgICBmdW5jdGlvbiBtb3ZlSChkaXIsIHVuaXQpIHsKLSAgICAg
IHZhciBwb3MgPSBkaXIgPCAwID8gc2VsLmZyb20gOiBzZWwudG87Ci0gICAgICBpZiAoc2hpZnRT
ZWxlY3RpbmcgfHwgcG9zRXEoc2VsLmZyb20sIHNlbC50bykpIHBvcyA9IGZpbmRQb3NIKGRpciwg
dW5pdCk7Ci0gICAgICBzZXRDdXJzb3IocG9zLmxpbmUsIHBvcy5jaCwgdHJ1ZSk7Ci0gICAgfQot
ICAgIGZ1bmN0aW9uIGRlbGV0ZUgoZGlyLCB1bml0KSB7Ci0gICAgICBpZiAoIXBvc0VxKHNlbC5m
cm9tLCBzZWwudG8pKSByZXBsYWNlUmFuZ2UoIiIsIHNlbC5mcm9tLCBzZWwudG8pOwotICAgICAg
ZWxzZSBpZiAoZGlyIDwgMCkgcmVwbGFjZVJhbmdlKCIiLCBmaW5kUG9zSChkaXIsIHVuaXQpLCBz
ZWwudG8pOwotICAgICAgZWxzZSByZXBsYWNlUmFuZ2UoIiIsIHNlbC5mcm9tLCBmaW5kUG9zSChk
aXIsIHVuaXQpKTsKLSAgICAgIHVzZXJTZWxDaGFuZ2UgPSB0cnVlOwotICAgIH0KLSAgICBmdW5j
dGlvbiBtb3ZlVihkaXIsIHVuaXQpIHsKLSAgICAgIHZhciBkaXN0ID0gMCwgcG9zID0gbG9jYWxD
b29yZHMoc2VsLmludmVydGVkID8gc2VsLmZyb20gOiBzZWwudG8sIHRydWUpOwotICAgICAgaWYg
KGdvYWxDb2x1bW4gIT0gbnVsbCkgcG9zLnggPSBnb2FsQ29sdW1uOwotICAgICAgaWYgKHVuaXQg
PT0gInBhZ2UiKSBkaXN0ID0gTWF0aC5taW4oc2Nyb2xsZXIuY2xpZW50SGVpZ2h0LCB3aW5kb3cu
aW5uZXJIZWlnaHQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCk7Ci0g
ICAgICBlbHNlIGlmICh1bml0ID09ICJsaW5lIikgZGlzdCA9IHRleHRIZWlnaHQoKTsKLSAgICAg
IHZhciB0YXJnZXQgPSBjb29yZHNDaGFyKHBvcy54LCBwb3MueSArIGRpc3QgKiBkaXIgKyAyKTsK
LSAgICAgIGlmICh1bml0ID09ICJwYWdlIikgc2Nyb2xsYmFyLnNjcm9sbFRvcCArPSBsb2NhbENv
b3Jkcyh0YXJnZXQsIHRydWUpLnkgLSBwb3MueTsKLSAgICAgIHNldEN1cnNvcih0YXJnZXQubGlu
ZSwgdGFyZ2V0LmNoLCB0cnVlKTsKLSAgICAgIGdvYWxDb2x1bW4gPSBwb3MueDsKLSAgICB9Ci0K
LSAgICBmdW5jdGlvbiBmaW5kV29yZEF0KHBvcykgewotICAgICAgdmFyIGxpbmUgPSBnZXRMaW5l
KHBvcy5saW5lKS50ZXh0OwotICAgICAgdmFyIHN0YXJ0ID0gcG9zLmNoLCBlbmQgPSBwb3MuY2g7
Ci0gICAgICBpZiAobGluZSkgewotICAgICAgICBpZiAocG9zLmFmdGVyID09PSBmYWxzZSB8fCBl
bmQgPT0gbGluZS5sZW5ndGgpIC0tc3RhcnQ7IGVsc2UgKytlbmQ7Ci0gICAgICAgIHZhciBzdGFy
dENoYXIgPSBsaW5lLmNoYXJBdChzdGFydCk7Ci0gICAgICAgIHZhciBjaGVjayA9IGlzV29yZENo
YXIoc3RhcnRDaGFyKSA/IGlzV29yZENoYXIgOgotICAgICAgICAgICAgICAgICAgICAvXHMvLnRl
c3Qoc3RhcnRDaGFyKSA/IGZ1bmN0aW9uKGNoKSB7cmV0dXJuIC9ccy8udGVzdChjaCk7fSA6Ci0g
ICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKGNoKSB7cmV0dXJuICEvXHMvLnRlc3QoY2gpICYm
ICFpc1dvcmRDaGFyKGNoKTt9OwotICAgICAgICB3aGlsZSAoc3RhcnQgPiAwICYmIGNoZWNrKGxp
bmUuY2hhckF0KHN0YXJ0IC0gMSkpKSAtLXN0YXJ0OwotICAgICAgICB3aGlsZSAoZW5kIDwgbGlu
ZS5sZW5ndGggJiYgY2hlY2sobGluZS5jaGFyQXQoZW5kKSkpICsrZW5kOwotICAgICAgfQotICAg
ICAgcmV0dXJuIHtmcm9tOiB7bGluZTogcG9zLmxpbmUsIGNoOiBzdGFydH0sIHRvOiB7bGluZTog
cG9zLmxpbmUsIGNoOiBlbmR9fTsKLSAgICB9Ci0gICAgZnVuY3Rpb24gc2VsZWN0TGluZShsaW5l
KSB7Ci0gICAgICBzZXRTZWxlY3Rpb25Vc2VyKHtsaW5lOiBsaW5lLCBjaDogMH0sIGNsaXBQb3Mo
e2xpbmU6IGxpbmUgKyAxLCBjaDogMH0pKTsKLSAgICB9Ci0gICAgZnVuY3Rpb24gaW5kZW50U2Vs
ZWN0ZWQobW9kZSkgewotICAgICAgaWYgKHBvc0VxKHNlbC5mcm9tLCBzZWwudG8pKSByZXR1cm4g
aW5kZW50TGluZShzZWwuZnJvbS5saW5lLCBtb2RlKTsKLSAgICAgIHZhciBlID0gc2VsLnRvLmxp
bmUgLSAoc2VsLnRvLmNoID8gMCA6IDEpOwotICAgICAgZm9yICh2YXIgaSA9IHNlbC5mcm9tLmxp
bmU7IGkgPD0gZTsgKytpKSBpbmRlbnRMaW5lKGksIG1vZGUpOwotICAgIH0KLQotICAgIGZ1bmN0
aW9uIGluZGVudExpbmUobiwgaG93KSB7Ci0gICAgICBpZiAoIWhvdykgaG93ID0gImFkZCI7Ci0g
ICAgICBpZiAoaG93ID09ICJzbWFydCIpIHsKLSAgICAgICAgaWYgKCFtb2RlLmluZGVudCkgaG93
ID0gInByZXYiOwotICAgICAgICBlbHNlIHZhciBzdGF0ZSA9IGdldFN0YXRlQmVmb3JlKG4pOwot
ICAgICAgfQotCi0gICAgICB2YXIgbGluZSA9IGdldExpbmUobiksIGN1clNwYWNlID0gbGluZS5p
bmRlbnRhdGlvbihvcHRpb25zLnRhYlNpemUpLAotICAgICAgICAgIGN1clNwYWNlU3RyaW5nID0g
bGluZS50ZXh0Lm1hdGNoKC9eXHMqLylbMF0sIGluZGVudGF0aW9uOwotICAgICAgaWYgKGhvdyA9
PSAic21hcnQiKSB7Ci0gICAgICAgIGluZGVudGF0aW9uID0gbW9kZS5pbmRlbnQoc3RhdGUsIGxp
bmUudGV4dC5zbGljZShjdXJTcGFjZVN0cmluZy5sZW5ndGgpLCBsaW5lLnRleHQpOwotICAgICAg
ICBpZiAoaW5kZW50YXRpb24gPT0gUGFzcykgaG93ID0gInByZXYiOwotICAgICAgfQotICAgICAg
aWYgKGhvdyA9PSAicHJldiIpIHsKLSAgICAgICAgaWYgKG4pIGluZGVudGF0aW9uID0gZ2V0TGlu
ZShuLTEpLmluZGVudGF0aW9uKG9wdGlvbnMudGFiU2l6ZSk7Ci0gICAgICAgIGVsc2UgaW5kZW50
YXRpb24gPSAwOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoaG93ID09ICJhZGQiKSBpbmRlbnRh
dGlvbiA9IGN1clNwYWNlICsgb3B0aW9ucy5pbmRlbnRVbml0OwotICAgICAgZWxzZSBpZiAoaG93
ID09ICJzdWJ0cmFjdCIpIGluZGVudGF0aW9uID0gY3VyU3BhY2UgLSBvcHRpb25zLmluZGVudFVu
aXQ7Ci0gICAgICBpbmRlbnRhdGlvbiA9IE1hdGgubWF4KDAsIGluZGVudGF0aW9uKTsKLSAgICAg
IHZhciBkaWZmID0gaW5kZW50YXRpb24gLSBjdXJTcGFjZTsKLQotICAgICAgdmFyIGluZGVudFN0
cmluZyA9ICIiLCBwb3MgPSAwOwotICAgICAgaWYgKG9wdGlvbnMuaW5kZW50V2l0aFRhYnMpCi0g
ICAgICAgIGZvciAodmFyIGkgPSBNYXRoLmZsb29yKGluZGVudGF0aW9uIC8gb3B0aW9ucy50YWJT
aXplKTsgaTsgLS1pKSB7cG9zICs9IG9wdGlvbnMudGFiU2l6ZTsgaW5kZW50U3RyaW5nICs9ICJc
dCI7fQotICAgICAgd2hpbGUgKHBvcyA8IGluZGVudGF0aW9uKSB7Kytwb3M7IGluZGVudFN0cmlu
ZyArPSAiICI7fQotCi0gICAgICByZXBsYWNlUmFuZ2UoaW5kZW50U3RyaW5nLCB7bGluZTogbiwg
Y2g6IDB9LCB7bGluZTogbiwgY2g6IGN1clNwYWNlU3RyaW5nLmxlbmd0aH0pOwotICAgIH0KLQot
ICAgIGZ1bmN0aW9uIGxvYWRNb2RlKCkgewotICAgICAgbW9kZSA9IENvZGVNaXJyb3IuZ2V0TW9k
ZShvcHRpb25zLCBvcHRpb25zLm1vZGUpOwotICAgICAgZG9jLml0ZXIoMCwgZG9jLnNpemUsIGZ1
bmN0aW9uKGxpbmUpIHsgbGluZS5zdGF0ZUFmdGVyID0gbnVsbDsgfSk7Ci0gICAgICB3b3JrID0g
WzBdOwotICAgICAgc3RhcnRXb3JrZXIoKTsKLSAgICB9Ci0gICAgZnVuY3Rpb24gZ3V0dGVyQ2hh
bmdlZCgpIHsKLSAgICAgIHZhciB2aXNpYmxlID0gb3B0aW9ucy5ndXR0ZXIgfHwgb3B0aW9ucy5s
aW5lTnVtYmVyczsKLSAgICAgIGd1dHRlci5zdHlsZS5kaXNwbGF5ID0gdmlzaWJsZSA/ICIiIDog
Im5vbmUiOwotICAgICAgaWYgKHZpc2libGUpIGd1dHRlckRpcnR5ID0gdHJ1ZTsKLSAgICAgIGVs
c2UgbGluZURpdi5wYXJlbnROb2RlLnN0eWxlLm1hcmdpbkxlZnQgPSAwOwotICAgIH0KLSAgICBm
dW5jdGlvbiB3cmFwcGluZ0NoYW5nZWQoZnJvbSwgdG8pIHsKLSAgICAgIGlmIChvcHRpb25zLmxp
bmVXcmFwcGluZykgewotICAgICAgICB3cmFwcGVyLmNsYXNzTmFtZSArPSAiIENvZGVNaXJyb3It
d3JhcCI7Ci0gICAgICAgIHZhciBwZXJMaW5lID0gc2Nyb2xsZXIuY2xpZW50V2lkdGggLyBjaGFy
V2lkdGgoKSAtIDM7Ci0gICAgICAgIGRvYy5pdGVyKDAsIGRvYy5zaXplLCBmdW5jdGlvbihsaW5l
KSB7Ci0gICAgICAgICAgaWYgKGxpbmUuaGlkZGVuKSByZXR1cm47Ci0gICAgICAgICAgdmFyIGd1
ZXNzID0gTWF0aC5jZWlsKGxpbmUudGV4dC5sZW5ndGggLyBwZXJMaW5lKSB8fCAxOwotICAgICAg
ICAgIGlmIChndWVzcyAhPSAxKSB1cGRhdGVMaW5lSGVpZ2h0KGxpbmUsIGd1ZXNzKTsKLSAgICAg
ICAgfSk7Ci0gICAgICAgIGxpbmVTcGFjZS5zdHlsZS5taW5XaWR0aCA9IHdpZHRoRm9yY2VyLnN0
eWxlLmxlZnQgPSAiIjsKKworICAgIHZhciBlZGl0b3JTaXplID0gZGlzcGxheS53cmFwcGVyLmdl
dEJvdW5kaW5nQ2xpZW50UmVjdCgpOworICAgIC8vIFVzZWQgdG8gZW5zdXJlIHRpbWVvdXQgcmUt
dHJpZXMgZG9uJ3QgZmlyZSB3aGVuIGFub3RoZXIgZXh0ZW5kCisgICAgLy8gaGFwcGVuZWQgaW4g
dGhlIG1lYW50aW1lIChjbGVhclRpbWVvdXQgaXNuJ3QgcmVsaWFibGUgLS0gYXQKKyAgICAvLyBs
ZWFzdCBvbiBDaHJvbWUsIHRoZSB0aW1lb3V0cyBzdGlsbCBoYXBwZW4gZXZlbiB3aGVuIGNsZWFy
ZWQsCisgICAgLy8gaWYgdGhlIGNsZWFyIGhhcHBlbnMgYWZ0ZXIgdGhlaXIgc2NoZWR1bGVkIGZp
cmluZyB0aW1lKS4KKyAgICB2YXIgY291bnRlciA9IDA7CisKKyAgICBmdW5jdGlvbiBleHRlbmQo
ZSkgeworICAgICAgdmFyIGN1ckNvdW50ID0gKytjb3VudGVyOworICAgICAgdmFyIGN1ciA9IHBv
c0Zyb21Nb3VzZShjbSwgZSwgdHJ1ZSk7CisgICAgICBpZiAoIWN1cikgcmV0dXJuOworICAgICAg
aWYgKCFwb3NFcShjdXIsIGxhc3QpKSB7CisgICAgICAgIGlmICghdmlldy5mb2N1c2VkKSBvbkZv
Y3VzKGNtKTsKKyAgICAgICAgbGFzdCA9IGN1cjsKKyAgICAgICAgZG9TZWxlY3QoY3VyKTsKKyAg
ICAgICAgdmFyIHZpc2libGUgPSB2aXNpYmxlTGluZXMoZGlzcGxheSwgZG9jKTsKKyAgICAgICAg
aWYgKGN1ci5saW5lID49IHZpc2libGUudG8gfHwgY3VyLmxpbmUgPCB2aXNpYmxlLmZyb20pCisg
ICAgICAgICAgc2V0VGltZW91dChvcGVyYXRpb24oY20sIGZ1bmN0aW9uKCl7aWYgKGNvdW50ZXIg
PT0gY3VyQ291bnQpIGV4dGVuZChlKTt9KSwgMTUwKTsKICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
IHdyYXBwZXIuY2xhc3NOYW1lID0gd3JhcHBlci5jbGFzc05hbWUucmVwbGFjZSgiIENvZGVNaXJy
b3Itd3JhcCIsICIiKTsKLSAgICAgICAgY29tcHV0ZU1heExlbmd0aCgpOwotICAgICAgICBkb2Mu
aXRlcigwLCBkb2Muc2l6ZSwgZnVuY3Rpb24obGluZSkgewotICAgICAgICAgIGlmIChsaW5lLmhl
aWdodCAhPSAxICYmICFsaW5lLmhpZGRlbikgdXBkYXRlTGluZUhlaWdodChsaW5lLCAxKTsKLSAg
ICAgICAgfSk7Ci0gICAgICB9Ci0gICAgICBjaGFuZ2VzLnB1c2goe2Zyb206IDAsIHRvOiBkb2Mu
c2l6ZX0pOwotICAgIH0KLSAgICBmdW5jdGlvbiBtYWtlVGFiKGNvbCkgewotICAgICAgdmFyIHcg
PSBvcHRpb25zLnRhYlNpemUgLSBjb2wgJSBvcHRpb25zLnRhYlNpemUsIGNhY2hlZCA9IHRhYkNh
Y2hlW3ddOwotICAgICAgaWYgKGNhY2hlZCkgcmV0dXJuIGNhY2hlZDsKLSAgICAgIGZvciAodmFy
IHN0ciA9ICIiLCBpID0gMDsgaSA8IHc7ICsraSkgc3RyICs9ICIgIjsKLSAgICAgIHZhciBzcGFu
ID0gZWx0KCJzcGFuIiwgc3RyLCAiY20tdGFiIik7Ci0gICAgICByZXR1cm4gKHRhYkNhY2hlW3dd
ID0ge2VsZW1lbnQ6IHNwYW4sIHdpZHRoOiB3fSk7Ci0gICAgfQotICAgIGZ1bmN0aW9uIHRoZW1l
Q2hhbmdlZCgpIHsKLSAgICAgIHNjcm9sbGVyLmNsYXNzTmFtZSA9IHNjcm9sbGVyLmNsYXNzTmFt
ZS5yZXBsYWNlKC9ccypjbS1zLVxTKy9nLCAiIikgKwotICAgICAgICBvcHRpb25zLnRoZW1lLnJl
cGxhY2UoLyhefFxzKVxzKi9nLCAiIGNtLXMtIik7Ci0gICAgfQotICAgIGZ1bmN0aW9uIGtleU1h
cENoYW5nZWQoKSB7Ci0gICAgICB2YXIgc3R5bGUgPSBrZXlNYXBbb3B0aW9ucy5rZXlNYXBdLnN0
eWxlOwotICAgICAgd3JhcHBlci5jbGFzc05hbWUgPSB3cmFwcGVyLmNsYXNzTmFtZS5yZXBsYWNl
KC9ccypjbS1rZXltYXAtXFMrL2csICIiKSArCi0gICAgICAgIChzdHlsZSA/ICIgY20ta2V5bWFw
LSIgKyBzdHlsZSA6ICIiKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBUZXh0TWFya2VyKCkgeyB0
aGlzLnNldCA9IFtdOyB9Ci0gICAgVGV4dE1hcmtlci5wcm90b3R5cGUuY2xlYXIgPSBvcGVyYXRp
b24oZnVuY3Rpb24oKSB7Ci0gICAgICB2YXIgbWluID0gSW5maW5pdHksIG1heCA9IC1JbmZpbml0
eTsKLSAgICAgIGZvciAodmFyIGkgPSAwLCBlID0gdGhpcy5zZXQubGVuZ3RoOyBpIDwgZTsgKytp
KSB7Ci0gICAgICAgIHZhciBsaW5lID0gdGhpcy5zZXRbaV0sIG1rID0gbGluZS5tYXJrZWQ7Ci0g
ICAgICAgIGlmICghbWsgfHwgIWxpbmUucGFyZW50KSBjb250aW51ZTsKLSAgICAgICAgdmFyIGxp
bmVOID0gbGluZU5vKGxpbmUpOwotICAgICAgICBtaW4gPSBNYXRoLm1pbihtaW4sIGxpbmVOKTsg
bWF4ID0gTWF0aC5tYXgobWF4LCBsaW5lTik7Ci0gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwg
bWsubGVuZ3RoOyArK2opCi0gICAgICAgICAgaWYgKG1rW2pdLm1hcmtlciA9PSB0aGlzKSBtay5z
cGxpY2Uoai0tLCAxKTsKLSAgICAgIH0KLSAgICAgIGlmIChtaW4gIT0gSW5maW5pdHkpCi0gICAg
ICAgIGNoYW5nZXMucHVzaCh7ZnJvbTogbWluLCB0bzogbWF4ICsgMX0pOworICAgICAgICB2YXIg
b3V0c2lkZSA9IGUuY2xpZW50WSA8IGVkaXRvclNpemUudG9wID8gLTIwIDogZS5jbGllbnRZID4g
ZWRpdG9yU2l6ZS5ib3R0b20gPyAyMCA6IDA7CisgICAgICAgIGlmIChvdXRzaWRlKSBzZXRUaW1l
b3V0KG9wZXJhdGlvbihjbSwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgaWYgKGNvdW50ZXIgIT0g
Y3VyQ291bnQpIHJldHVybjsKKyAgICAgICAgICBkaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcCAr
PSBvdXRzaWRlOworICAgICAgICAgIGV4dGVuZChlKTsKKyAgICAgICAgfSksIDUwKTsKKyAgICAg
IH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBkb25lKGUpIHsKKyAgICAgIGNvdW50ZXIgPSBJbmZp
bml0eTsKKyAgICAgIHZhciBjdXIgPSBwb3NGcm9tTW91c2UoY20sIGUpOworICAgICAgaWYgKGN1
cikgZG9TZWxlY3QoY3VyKTsKKyAgICAgIGVfcHJldmVudERlZmF1bHQoZSk7CisgICAgICBmb2N1
c0lucHV0KGNtKTsKKyAgICAgIG9mZihkb2N1bWVudCwgIm1vdXNlbW92ZSIsIG1vdmUpOworICAg
ICAgb2ZmKGRvY3VtZW50LCAibW91c2V1cCIsIHVwKTsKKyAgICB9CisKKyAgICB2YXIgbW92ZSA9
IG9wZXJhdGlvbihjbSwgZnVuY3Rpb24oZSkgeworICAgICAgZV9wcmV2ZW50RGVmYXVsdChlKTsK
KyAgICAgIGlmICghaWUgJiYgIWVfYnV0dG9uKGUpKSBkb25lKGUpOworICAgICAgZWxzZSBleHRl
bmQoZSk7CiAgICAgfSk7Ci0gICAgVGV4dE1hcmtlci5wcm90b3R5cGUuZmluZCA9IGZ1bmN0aW9u
KCkgewotICAgICAgdmFyIGZyb20sIHRvOwotICAgICAgZm9yICh2YXIgaSA9IDAsIGUgPSB0aGlz
LnNldC5sZW5ndGg7IGkgPCBlOyArK2kpIHsKLSAgICAgICAgdmFyIGxpbmUgPSB0aGlzLnNldFtp
XSwgbWsgPSBsaW5lLm1hcmtlZDsKLSAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBtay5sZW5n
dGg7ICsraikgewotICAgICAgICAgIHZhciBtYXJrID0gbWtbal07Ci0gICAgICAgICAgaWYgKG1h
cmsubWFya2VyID09IHRoaXMpIHsKLSAgICAgICAgICAgIGlmIChtYXJrLmZyb20gIT0gbnVsbCB8
fCBtYXJrLnRvICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgdmFyIGZvdW5kID0gbGluZU5vKGxp
bmUpOwotICAgICAgICAgICAgICBpZiAoZm91bmQgIT0gbnVsbCkgewotICAgICAgICAgICAgICAg
IGlmIChtYXJrLmZyb20gIT0gbnVsbCkgZnJvbSA9IHtsaW5lOiBmb3VuZCwgY2g6IG1hcmsuZnJv
bX07Ci0gICAgICAgICAgICAgICAgaWYgKG1hcmsudG8gIT0gbnVsbCkgdG8gPSB7bGluZTogZm91
bmQsIGNoOiBtYXJrLnRvfTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQorICAgIHZh
ciB1cCA9IG9wZXJhdGlvbihjbSwgZG9uZSk7CisgICAgb24oZG9jdW1lbnQsICJtb3VzZW1vdmUi
LCBtb3ZlKTsKKyAgICBvbihkb2N1bWVudCwgIm1vdXNldXAiLCB1cCk7CisgIH0KKworICBmdW5j
dGlvbiBvbkRyb3AoZSkgeworICAgIHZhciBjbSA9IHRoaXM7CisgICAgaWYgKGNtLm9wdGlvbnMu
b25EcmFnRXZlbnQgJiYgY20ub3B0aW9ucy5vbkRyYWdFdmVudChjbSwgYWRkU3RvcChlKSkpIHJl
dHVybjsKKyAgICBlX3ByZXZlbnREZWZhdWx0KGUpOworICAgIHZhciBwb3MgPSBwb3NGcm9tTW91
c2UoY20sIGUsIHRydWUpLCBmaWxlcyA9IGUuZGF0YVRyYW5zZmVyLmZpbGVzOworICAgIGlmICgh
cG9zIHx8IGlzUmVhZE9ubHkoY20pKSByZXR1cm47CisgICAgaWYgKGZpbGVzICYmIGZpbGVzLmxl
bmd0aCAmJiB3aW5kb3cuRmlsZVJlYWRlciAmJiB3aW5kb3cuRmlsZSkgeworICAgICAgdmFyIG4g
PSBmaWxlcy5sZW5ndGgsIHRleHQgPSBBcnJheShuKSwgcmVhZCA9IDA7CisgICAgICB2YXIgbG9h
ZEZpbGUgPSBmdW5jdGlvbihmaWxlLCBpKSB7CisgICAgICAgIHZhciByZWFkZXIgPSBuZXcgRmls
ZVJlYWRlcjsKKyAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKCkgeworICAgICAgICAg
IHRleHRbaV0gPSByZWFkZXIucmVzdWx0OworICAgICAgICAgIGlmICgrK3JlYWQgPT0gbikgewor
ICAgICAgICAgICAgcG9zID0gY2xpcFBvcyhjbS52aWV3LmRvYywgcG9zKTsKKyAgICAgICAgICAg
IG9wZXJhdGlvbihjbSwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgIHZhciBlbmQgPSByZXBs
YWNlUmFuZ2UoY20sIHRleHQuam9pbigiIiksIHBvcywgcG9zKTsKKyAgICAgICAgICAgICAgc2V0
U2VsZWN0aW9uVXNlcihjbSwgcG9zLCBlbmQpOworICAgICAgICAgICAgfSkoKTsKICAgICAgICAg
ICB9CisgICAgICAgIH07CisgICAgICAgIHJlYWRlci5yZWFkQXNUZXh0KGZpbGUpOworICAgICAg
fTsKKyAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKSBsb2FkRmlsZShmaWxlc1tpXSwg
aSk7CisgICAgfSBlbHNlIHsKKyAgICAgIC8vIERvbid0IGRvIGEgcmVwbGFjZSBpZiB0aGUgZHJv
cCBoYXBwZW5lZCBpbnNpZGUgb2YgdGhlIHNlbGVjdGVkIHRleHQuCisgICAgICBpZiAoY20udmll
dy5kcmFnZ2luZ1RleHQgJiYgIShwb3NMZXNzKHBvcywgY20udmlldy5zZWwuZnJvbSkgfHwgcG9z
TGVzcyhjbS52aWV3LnNlbC50bywgcG9zKSkpIHsKKyAgICAgICAgY20udmlldy5kcmFnZ2luZ1Rl
eHQoZSk7CisgICAgICAgIGlmIChpZSkgc2V0VGltZW91dChiaW5kKGZvY3VzSW5wdXQsIGNtKSwg
NTApOworICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgICB0cnkgeworICAgICAgICB2YXIg
dGV4dCA9IGUuZGF0YVRyYW5zZmVyLmdldERhdGEoIlRleHQiKTsKKyAgICAgICAgaWYgKHRleHQp
IHsKKyAgICAgICAgICBjb21wb3VuZENoYW5nZShjbSwgZnVuY3Rpb24oKSB7CisgICAgICAgICAg
ICB2YXIgY3VyRnJvbSA9IGNtLnZpZXcuc2VsLmZyb20sIGN1clRvID0gY20udmlldy5zZWwudG87
CisgICAgICAgICAgICBzZXRTZWxlY3Rpb25Vc2VyKGNtLCBwb3MsIHBvcyk7CisgICAgICAgICAg
ICBpZiAoY20udmlldy5kcmFnZ2luZ1RleHQpIHJlcGxhY2VSYW5nZShjbSwgIiIsIGN1ckZyb20s
IGN1clRvKTsKKyAgICAgICAgICAgIGNtLnJlcGxhY2VTZWxlY3Rpb24odGV4dCk7CisgICAgICAg
ICAgICBmb2N1c0lucHV0KGNtKTsKKyAgICAgICAgICAgIG9uRm9jdXMoY20pOworICAgICAgICAg
IH0pOwogICAgICAgICB9CiAgICAgICB9Ci0gICAgICByZXR1cm4ge2Zyb206IGZyb20sIHRvOiB0
b307Ci0gICAgfTsKKyAgICAgIGNhdGNoKGUpe30KKyAgICB9CisgIH0KIAotICAgIGZ1bmN0aW9u
IG1hcmtUZXh0KGZyb20sIHRvLCBjbGFzc05hbWUpIHsKLSAgICAgIGZyb20gPSBjbGlwUG9zKGZy
b20pOyB0byA9IGNsaXBQb3ModG8pOwotICAgICAgdmFyIHRtID0gbmV3IFRleHRNYXJrZXIoKTsK
LSAgICAgIGlmICghcG9zTGVzcyhmcm9tLCB0bykpIHJldHVybiB0bTsKLSAgICAgIGZ1bmN0aW9u
IGFkZChsaW5lLCBmcm9tLCB0bywgY2xhc3NOYW1lKSB7Ci0gICAgICAgIGdldExpbmUobGluZSku
YWRkTWFyayhuZXcgTWFya2VkVGV4dChmcm9tLCB0bywgY2xhc3NOYW1lLCB0bSkpOwotICAgICAg
fQotICAgICAgaWYgKGZyb20ubGluZSA9PSB0by5saW5lKSBhZGQoZnJvbS5saW5lLCBmcm9tLmNo
LCB0by5jaCwgY2xhc3NOYW1lKTsKLSAgICAgIGVsc2UgewotICAgICAgICBhZGQoZnJvbS5saW5l
LCBmcm9tLmNoLCBudWxsLCBjbGFzc05hbWUpOwotICAgICAgICBmb3IgKHZhciBpID0gZnJvbS5s
aW5lICsgMSwgZSA9IHRvLmxpbmU7IGkgPCBlOyArK2kpCi0gICAgICAgICAgYWRkKGksIG51bGws
IG51bGwsIGNsYXNzTmFtZSk7Ci0gICAgICAgIGFkZCh0by5saW5lLCBudWxsLCB0by5jaCwgY2xh
c3NOYW1lKTsKLSAgICAgIH0KLSAgICAgIGNoYW5nZXMucHVzaCh7ZnJvbTogZnJvbS5saW5lLCB0
bzogdG8ubGluZSArIDF9KTsKLSAgICAgIHJldHVybiB0bTsKLSAgICB9Ci0KLSAgICBmdW5jdGlv
biBzZXRCb29rbWFyayhwb3MpIHsKLSAgICAgIHBvcyA9IGNsaXBQb3MocG9zKTsKLSAgICAgIHZh
ciBibSA9IG5ldyBCb29rbWFyayhwb3MuY2gpOwotICAgICAgZ2V0TGluZShwb3MubGluZSkuYWRk
TWFyayhibSk7Ci0gICAgICByZXR1cm4gYm07Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gZmluZE1h
cmtzQXQocG9zKSB7Ci0gICAgICBwb3MgPSBjbGlwUG9zKHBvcyk7Ci0gICAgICB2YXIgbWFya2Vy
cyA9IFtdLCBtYXJrZWQgPSBnZXRMaW5lKHBvcy5saW5lKS5tYXJrZWQ7Ci0gICAgICBpZiAoIW1h
cmtlZCkgcmV0dXJuIG1hcmtlcnM7Ci0gICAgICBmb3IgKHZhciBpID0gMCwgZSA9IG1hcmtlZC5s
ZW5ndGg7IGkgPCBlOyArK2kpIHsKLSAgICAgICAgdmFyIG0gPSBtYXJrZWRbaV07Ci0gICAgICAg
IGlmICgobS5mcm9tID09IG51bGwgfHwgbS5mcm9tIDw9IHBvcy5jaCkgJiYKLSAgICAgICAgICAg
IChtLnRvID09IG51bGwgfHwgbS50byA+PSBwb3MuY2gpKQotICAgICAgICAgIG1hcmtlcnMucHVz
aChtLm1hcmtlciB8fCBtKTsKKyAgZnVuY3Rpb24gY2xpY2tJbkd1dHRlcihlKSB7CisgICAgdmFy
IGNtID0gdGhpcywgZGlzcGxheSA9IGNtLmRpc3BsYXk7CisgICAgdHJ5IHsgdmFyIG1YID0gZS5j
bGllbnRYLCBtWSA9IGUuY2xpZW50WTsgfQorICAgIGNhdGNoKGUpIHsgcmV0dXJuIGZhbHNlOyB9
CisgICAgCisgICAgaWYgKG1YID49IE1hdGguZmxvb3IoZGlzcGxheS5ndXR0ZXJzLmdldEJvdW5k
aW5nQ2xpZW50UmVjdCgpLnJpZ2h0KSkgcmV0dXJuIGZhbHNlOworICAgIGVfcHJldmVudERlZmF1
bHQoZSk7CisgICAgaWYgKCFoYXNIYW5kbGVyKGNtLCAiZ3V0dGVyQ2xpY2siKSkgcmV0dXJuIHRy
dWU7CisKKyAgICB2YXIgbGluZUJveCA9IGRpc3BsYXkubGluZURpdi5nZXRCb3VuZGluZ0NsaWVu
dFJlY3QoKTsKKyAgICBpZiAobVkgPiBsaW5lQm94LmJvdHRvbSkgcmV0dXJuIHRydWU7CisgICAg
bVkgLT0gbGluZUJveC50b3AgLSBkaXNwbGF5LnZpZXdPZmZzZXQ7CisKKyAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IGNtLm9wdGlvbnMuZ3V0dGVycy5sZW5ndGg7ICsraSkgeworICAgICAgdmFyIGcg
PSBkaXNwbGF5Lmd1dHRlcnMuY2hpbGROb2Rlc1tpXTsKKyAgICAgIGlmIChnICYmIGcuZ2V0Qm91
bmRpbmdDbGllbnRSZWN0KCkucmlnaHQgPj0gbVgpIHsKKyAgICAgICAgdmFyIGxpbmUgPSBsaW5l
QXRIZWlnaHQoY20udmlldy5kb2MsIG1ZKTsKKyAgICAgICAgdmFyIGd1dHRlciA9IGNtLm9wdGlv
bnMuZ3V0dGVyc1tpXTsKKyAgICAgICAgc2lnbmFsTGF0ZXIoY20sIGNtLCAiZ3V0dGVyQ2xpY2si
LCBjbSwgbGluZSwgZ3V0dGVyLCBlKTsKKyAgICAgICAgYnJlYWs7CiAgICAgICB9Ci0gICAgICBy
ZXR1cm4gbWFya2VyczsKICAgICB9CisgICAgcmV0dXJuIHRydWU7CisgIH0KKworICBmdW5jdGlv
biBvbkRyYWdTdGFydChjbSwgZSkgeworICAgIHZhciB0eHQgPSBjbS5nZXRTZWxlY3Rpb24oKTsK
KyAgICBlLmRhdGFUcmFuc2Zlci5zZXREYXRhKCJUZXh0IiwgdHh0KTsKKworICAgIC8vIFVzZSBk
dW1teSBpbWFnZSBpbnN0ZWFkIG9mIGRlZmF1bHQgYnJvd3NlcnMgaW1hZ2UuCisgICAgaWYgKGUu
ZGF0YVRyYW5zZmVyLnNldERyYWdJbWFnZSkKKyAgICAgIGUuZGF0YVRyYW5zZmVyLnNldERyYWdJ
bWFnZShlbHQoJ2ltZycpLCAwLCAwKTsKKyAgfQorCisgIGZ1bmN0aW9uIHNldFNjcm9sbFRvcChj
bSwgdmFsKSB7CisgICAgaWYgKE1hdGguYWJzKGNtLnZpZXcuc2Nyb2xsVG9wIC0gdmFsKSA8IDIp
IHJldHVybjsKKyAgICBjbS52aWV3LnNjcm9sbFRvcCA9IHZhbDsKKyAgICBpZiAoIWdlY2tvKSB1
cGRhdGVEaXNwbGF5KGNtLCBbXSwgdmFsKTsKKyAgICBpZiAoY20uZGlzcGxheS5zY3JvbGxlci5z
Y3JvbGxUb3AgIT0gdmFsKSBjbS5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcCA9IHZhbDsKKyAg
ICBpZiAoY20uZGlzcGxheS5zY3JvbGxiYXJWLnNjcm9sbFRvcCAhPSB2YWwpIGNtLmRpc3BsYXku
c2Nyb2xsYmFyVi5zY3JvbGxUb3AgPSB2YWw7CisgICAgaWYgKGdlY2tvKSB1cGRhdGVEaXNwbGF5
KGNtLCBbXSk7CisgIH0KKyAgZnVuY3Rpb24gc2V0U2Nyb2xsTGVmdChjbSwgdmFsKSB7CisgICAg
aWYgKE1hdGguYWJzKGNtLnZpZXcuc2Nyb2xsTGVmdCAtIHZhbCkgPCAyKSByZXR1cm47CisgICAg
Y20udmlldy5zY3JvbGxMZWZ0ID0gdmFsOworICAgIGlmIChjbS5kaXNwbGF5LnNjcm9sbGVyLnNj
cm9sbExlZnQgIT0gdmFsKSBjbS5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbExlZnQgPSB2YWw7Cisg
ICAgaWYgKGNtLmRpc3BsYXkuc2Nyb2xsYmFySC5zY3JvbGxMZWZ0ICE9IHZhbCkgY20uZGlzcGxh
eS5zY3JvbGxiYXJILnNjcm9sbExlZnQgPSB2YWw7CisgICAgYWxpZ25WZXJ0aWNhbGx5KGNtLmRp
c3BsYXkpOworICB9CisKKyAgLy8gU2luY2UgdGhlIGRlbHRhIHZhbHVlcyByZXBvcnRlZCBvbiBt
b3VzZSB3aGVlbCBldmVudHMgYXJlCisgIC8vIHVuc3RhbmRhcmRpemVkIGJldHdlZW4gYnJvd3Nl
cnMgYW5kIGV2ZW4gYnJvd3NlciB2ZXJzaW9ucywgYW5kCisgIC8vIGdlbmVyYWxseSBob3JyaWJs
eSB1bnByZWRpY3RhYmxlLCB0aGlzIGNvZGUgc3RhcnRzIGJ5IG1lYXN1cmluZworICAvLyB0aGUg
c2Nyb2xsIGVmZmVjdCB0aGF0IHRoZSBmaXJzdCBmZXcgbW91c2Ugd2hlZWwgZXZlbnRzIGhhdmUs
CisgIC8vIGFuZCwgZnJvbSB0aGF0LCBkZXRlY3RzIHRoZSB3YXkgaXQgY2FuIGNvbnZlcnQgZGVs
dGFzIHRvIHBpeGVsCisgIC8vIG9mZnNldHMgYWZ0ZXJ3YXJkcy4KKyAgLy8KKyAgLy8gVGhlIHJl
YXNvbiB3ZSB3YW50IHRvIGtub3cgdGhlIGFtb3VudCBhIHdoZWVsIGV2ZW50IHdpbGwgc2Nyb2xs
CisgIC8vIGlzIHRoYXQgaXQgZ2l2ZXMgdXMgYSBjaGFuY2UgdG8gdXBkYXRlIHRoZSBkaXNwbGF5
IGJlZm9yZSB0aGUKKyAgLy8gYWN0dWFsIHNjcm9sbGluZyBoYXBwZW5zLCByZWR1Y2luZyBmbGlj
a2VyaW5nLgorCisgIHZhciB3aGVlbFNhbXBsZXMgPSAwLCB3aGVlbERYLCB3aGVlbERZLCB3aGVl
bFN0YXJ0WCwgd2hlZWxTdGFydFksIHdoZWVsUGl4ZWxzUGVyVW5pdCA9IG51bGw7CisgIC8vIEZp
bGwgaW4gYSBicm93c2VyLWRldGVjdGVkIHN0YXJ0aW5nIHZhbHVlIG9uIGJyb3dzZXJzIHdoZXJl
IHdlCisgIC8vIGtub3cgb25lLiBUaGVzZSBkb24ndCBoYXZlIHRvIGJlIGFjY3VyYXRlIC0tIHRo
ZSByZXN1bHQgb2YgdGhlbQorICAvLyBiZWluZyB3cm9uZyB3b3VsZCBqdXN0IGJlIGEgc2xpZ2h0
IGZsaWNrZXIgb24gdGhlIGZpcnN0IHdoZWVsCisgIC8vIHNjcm9sbCAoaWYgaXQgaXMgbGFyZ2Ug
ZW5vdWdoKS4KKyAgaWYgKGllKSB3aGVlbFBpeGVsc1BlclVuaXQgPSAtLjUzOworICBlbHNlIGlm
IChnZWNrbykgd2hlZWxQaXhlbHNQZXJVbml0ID0gMTU7CisgIGVsc2UgaWYgKGNocm9tZSkgd2hl
ZWxQaXhlbHNQZXJVbml0ID0gLS43OworICBlbHNlIGlmIChzYWZhcmkpIHdoZWVsUGl4ZWxzUGVy
VW5pdCA9IC0xLzM7CisKKyAgZnVuY3Rpb24gb25TY3JvbGxXaGVlbChjbSwgZSkgeworICAgIHZh
ciBkeCA9IGUud2hlZWxEZWx0YVgsIGR5ID0gZS53aGVlbERlbHRhWTsKKyAgICBpZiAoZHggPT0g
bnVsbCAmJiBlLmRldGFpbCAmJiBlLmF4aXMgPT0gZS5IT1JJWk9OVEFMX0FYSVMpIGR4ID0gZS5k
ZXRhaWw7CisgICAgaWYgKGR5ID09IG51bGwgJiYgZS5kZXRhaWwgJiYgZS5heGlzID09IGUuVkVS
VElDQUxfQVhJUykgZHkgPSBlLmRldGFpbDsKKyAgICBlbHNlIGlmIChkeSA9PSBudWxsKSBkeSA9
IGUud2hlZWxEZWx0YTsKKworICAgIHZhciBzY3JvbGwgPSBjbS5kaXNwbGF5LnNjcm9sbGVyOwor
ICAgIGlmICh3aGVlbFBpeGVsc1BlclVuaXQgIT0gbnVsbCkgeworICAgICAgdmFyIHBpeGVscyA9
IGR5ICogd2hlZWxQaXhlbHNQZXJVbml0OworICAgICAgdmFyIHRvcCA9IGNtLnZpZXcuc2Nyb2xs
VG9wLCBib3QgPSB0b3AgKyBjbS5kaXNwbGF5LndyYXBwZXIuY2xpZW50SGVpZ2h0OworICAgICAg
aWYgKHBpeGVscyA8IDApIHRvcCA9IE1hdGgubWF4KDAsIHRvcCArIHBpeGVscyk7CisgICAgICBl
bHNlIGJvdCA9IE1hdGgubWluKGNtLnZpZXcuZG9jLmhlaWdodCwgYm90ICsgcGl4ZWxzKTsKKyAg
ICAgIHVwZGF0ZURpc3BsYXkoY20sIFtdLCB7dG9wOiB0b3AsIGJvdHRvbTogYm90fSk7CisgICAg
fQorICAgIGlmICh3aGVlbFNhbXBsZXMgPCAyMCkgeworICAgICAgaWYgKHdoZWVsU3RhcnRYID09
IG51bGwpIHsKKyAgICAgICAgd2hlZWxTdGFydFggPSBzY3JvbGwuc2Nyb2xsTGVmdDsgd2hlZWxT
dGFydFkgPSBzY3JvbGwuc2Nyb2xsVG9wOworICAgICAgICB3aGVlbERYID0gZHg7IHdoZWVsRFkg
PSBkeTsKKyAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICB2YXIgbW92
ZWRYID0gc2Nyb2xsLnNjcm9sbExlZnQgLSB3aGVlbFN0YXJ0WDsKKyAgICAgICAgICB2YXIgbW92
ZWRZID0gc2Nyb2xsLnNjcm9sbFRvcCAtIHdoZWVsU3RhcnRZOworICAgICAgICAgIHZhciBzYW1w
bGUgPSAobW92ZWRZICYmIHdoZWVsRFkgJiYgbW92ZWRZIC8gd2hlZWxEWSkgfHwKKyAgICAgICAg
ICAgIChtb3ZlZFggJiYgd2hlZWxEWCAmJiBtb3ZlZFggLyB3aGVlbERYKTsKKyAgICAgICAgICB3
aGVlbFN0YXJ0WCA9IHdoZWVsU3RhcnRZID0gbnVsbDsKKyAgICAgICAgICBpZiAoIXNhbXBsZSkg
cmV0dXJuOworICAgICAgICAgIHdoZWVsUGl4ZWxzUGVyVW5pdCA9ICh3aGVlbFBpeGVsc1BlclVu
aXQgKiB3aGVlbFNhbXBsZXMgKyBzYW1wbGUpIC8gKHdoZWVsU2FtcGxlcyArIDEpOworICAgICAg
ICAgICsrd2hlZWxTYW1wbGVzOworICAgICAgICB9LCAyMDApOworICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgd2hlZWxEWCArPSBkeDsgd2hlZWxEWSArPSBkeTsKKyAgICAgIH0KKyAgICB9CisgIH0K
KworICBmdW5jdGlvbiBkb0hhbmRsZUJpbmRpbmcoY20sIGJvdW5kLCBkcm9wU2hpZnQpIHsKKyAg
ICBpZiAodHlwZW9mIGJvdW5kID09ICJzdHJpbmciKSB7CisgICAgICBib3VuZCA9IGNvbW1hbmRz
W2JvdW5kXTsKKyAgICAgIGlmICghYm91bmQpIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgdmFy
IHZpZXcgPSBjbS52aWV3LCBwcmV2U2hpZnQgPSB2aWV3LnNlbC5zaGlmdDsKKyAgICB0cnkgewor
ICAgICAgaWYgKGlzUmVhZE9ubHkoY20pKSB2aWV3LnN1cHByZXNzRWRpdHMgPSB0cnVlOworICAg
ICAgaWYgKGRyb3BTaGlmdCkgdmlldy5zZWwuc2hpZnQgPSBudWxsOworICAgICAgYm91bmQoY20p
OworICAgIH0gY2F0Y2goZSkgeworICAgICAgaWYgKGUgIT0gUGFzcykgdGhyb3cgZTsKKyAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgdmlldy5zZWwuc2hpZnQgPSBw
cmV2U2hpZnQ7CisgICAgICB2aWV3LnN1cHByZXNzRWRpdHMgPSBmYWxzZTsKKyAgICB9CisgICAg
cmV0dXJuIHRydWU7CisgIH0KKworICB2YXIgbWF5YmVUcmFuc2l0aW9uOworICBmdW5jdGlvbiBo
YW5kbGVLZXlCaW5kaW5nKGNtLCBlKSB7CisgICAgLy8gSGFuZGxlIGF1dG8ga2V5bWFwIHRyYW5z
aXRpb25zCisgICAgdmFyIHN0YXJ0TWFwID0gZ2V0S2V5TWFwKGNtLm9wdGlvbnMua2V5TWFwKSwg
bmV4dCA9IHN0YXJ0TWFwLmF1dG87CisgICAgY2xlYXJUaW1lb3V0KG1heWJlVHJhbnNpdGlvbik7
CisgICAgaWYgKG5leHQgJiYgIWlzTW9kaWZpZXJLZXkoZSkpIG1heWJlVHJhbnNpdGlvbiA9IHNl
dFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICBpZiAoZ2V0S2V5TWFwKGNtLm9wdGlvbnMua2V5
TWFwKSA9PSBzdGFydE1hcCkKKyAgICAgICAgY20ub3B0aW9ucy5rZXlNYXAgPSAobmV4dC5jYWxs
ID8gbmV4dC5jYWxsKG51bGwsIGNtKSA6IG5leHQpOworICAgIH0sIDUwKTsKKworICAgIHZhciBu
YW1lID0ga2V5TmFtZXNbZV9wcm9wKGUsICJrZXlDb2RlIildLCBoYW5kbGVkID0gZmFsc2U7Cisg
ICAgdmFyIGZsaXBDdHJsQ21kID0gb3BlcmEgJiYgbWFjOworICAgIGlmIChuYW1lID09IG51bGwg
fHwgZS5hbHRHcmFwaEtleSkgcmV0dXJuIGZhbHNlOworICAgIGlmIChlX3Byb3AoZSwgImFsdEtl
eSIpKSBuYW1lID0gIkFsdC0iICsgbmFtZTsKKyAgICBpZiAoZV9wcm9wKGUsIGZsaXBDdHJsQ21k
ID8gIm1ldGFLZXkiIDogImN0cmxLZXkiKSkgbmFtZSA9ICJDdHJsLSIgKyBuYW1lOworICAgIGlm
IChlX3Byb3AoZSwgZmxpcEN0cmxDbWQgPyAiY3RybEtleSIgOiAibWV0YUtleSIpKSBuYW1lID0g
IkNtZC0iICsgbmFtZTsKKworICAgIHZhciBzdG9wcGVkID0gZmFsc2U7CisgICAgZnVuY3Rpb24g
c3RvcCgpIHsgc3RvcHBlZCA9IHRydWU7IH0KKworICAgIGlmIChlX3Byb3AoZSwgInNoaWZ0S2V5
IikpIHsKKyAgICAgIGhhbmRsZWQgPSBsb29rdXBLZXkoIlNoaWZ0LSIgKyBuYW1lLCBjbS5vcHRp
b25zLmV4dHJhS2V5cywgY20ub3B0aW9ucy5rZXlNYXAsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZ1bmN0aW9uKGIpIHtyZXR1cm4gZG9IYW5kbGVCaW5kaW5nKGNtLCBiLCB0cnVlKTt9LCBz
dG9wKQorICAgICAgICB8fCBsb29rdXBLZXkobmFtZSwgY20ub3B0aW9ucy5leHRyYUtleXMsIGNt
Lm9wdGlvbnMua2V5TWFwLCBmdW5jdGlvbihiKSB7CisgICAgICAgICAgaWYgKHR5cGVvZiBiID09
ICJzdHJpbmciICYmIC9eZ29bQS1aXS8udGVzdChiKSkgcmV0dXJuIGRvSGFuZGxlQmluZGluZyhj
bSwgYik7CisgICAgICAgIH0sIHN0b3ApOworICAgIH0gZWxzZSB7CisgICAgICBoYW5kbGVkID0g
bG9va3VwS2V5KG5hbWUsIGNtLm9wdGlvbnMuZXh0cmFLZXlzLCBjbS5vcHRpb25zLmtleU1hcCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oYikgeyByZXR1cm4gZG9IYW5kbGVC
aW5kaW5nKGNtLCBiKTsgfSwgc3RvcCk7CisgICAgfQorICAgIGlmIChzdG9wcGVkKSBoYW5kbGVk
ID0gZmFsc2U7CisgICAgaWYgKGhhbmRsZWQpIHsKKyAgICAgIGVfcHJldmVudERlZmF1bHQoZSk7
CisgICAgICByZXN0YXJ0QmxpbmsoY20pOworICAgICAgaWYgKGllX2x0OSkgeyBlLm9sZEtleUNv
ZGUgPSBlLmtleUNvZGU7IGUua2V5Q29kZSA9IDA7IH0KKyAgICB9CisgICAgcmV0dXJuIGhhbmRs
ZWQ7CisgIH0KIAotICAgIGZ1bmN0aW9uIGFkZEd1dHRlck1hcmtlcihsaW5lLCB0ZXh0LCBjbGFz
c05hbWUpIHsKLSAgICAgIGlmICh0eXBlb2YgbGluZSA9PSAibnVtYmVyIikgbGluZSA9IGdldExp
bmUoY2xpcExpbmUobGluZSkpOwotICAgICAgbGluZS5ndXR0ZXJNYXJrZXIgPSB7dGV4dDogdGV4
dCwgc3R5bGU6IGNsYXNzTmFtZX07Ci0gICAgICBndXR0ZXJEaXJ0eSA9IHRydWU7Ci0gICAgICBy
ZXR1cm4gbGluZTsKLSAgICB9Ci0gICAgZnVuY3Rpb24gcmVtb3ZlR3V0dGVyTWFya2VyKGxpbmUp
IHsKLSAgICAgIGlmICh0eXBlb2YgbGluZSA9PSAibnVtYmVyIikgbGluZSA9IGdldExpbmUoY2xp
cExpbmUobGluZSkpOwotICAgICAgbGluZS5ndXR0ZXJNYXJrZXIgPSBudWxsOwotICAgICAgZ3V0
dGVyRGlydHkgPSB0cnVlOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIGNoYW5nZUxpbmUoaGFuZGxl
LCBvcCkgewotICAgICAgdmFyIG5vID0gaGFuZGxlLCBsaW5lID0gaGFuZGxlOwotICAgICAgaWYg
KHR5cGVvZiBoYW5kbGUgPT0gIm51bWJlciIpIGxpbmUgPSBnZXRMaW5lKGNsaXBMaW5lKGhhbmRs
ZSkpOwotICAgICAgZWxzZSBubyA9IGxpbmVObyhoYW5kbGUpOwotICAgICAgaWYgKG5vID09IG51
bGwpIHJldHVybiBudWxsOwotICAgICAgaWYgKG9wKGxpbmUsIG5vKSkgY2hhbmdlcy5wdXNoKHtm
cm9tOiBubywgdG86IG5vICsgMX0pOwotICAgICAgZWxzZSByZXR1cm4gbnVsbDsKLSAgICAgIHJl
dHVybiBsaW5lOwotICAgIH0KLSAgICBmdW5jdGlvbiBzZXRMaW5lQ2xhc3MoaGFuZGxlLCBjbGFz
c05hbWUsIGJnQ2xhc3NOYW1lKSB7Ci0gICAgICByZXR1cm4gY2hhbmdlTGluZShoYW5kbGUsIGZ1
bmN0aW9uKGxpbmUpIHsKLSAgICAgICAgaWYgKGxpbmUuY2xhc3NOYW1lICE9IGNsYXNzTmFtZSB8
fCBsaW5lLmJnQ2xhc3NOYW1lICE9IGJnQ2xhc3NOYW1lKSB7Ci0gICAgICAgICAgbGluZS5jbGFz
c05hbWUgPSBjbGFzc05hbWU7Ci0gICAgICAgICAgbGluZS5iZ0NsYXNzTmFtZSA9IGJnQ2xhc3NO
YW1lOworICBmdW5jdGlvbiBoYW5kbGVDaGFyQmluZGluZyhjbSwgZSwgY2gpIHsKKyAgICB2YXIg
aGFuZGxlZCA9IGxvb2t1cEtleSgiJyIgKyBjaCArICInIiwgY20ub3B0aW9ucy5leHRyYUtleXMs
IGNtLm9wdGlvbnMua2V5TWFwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9u
KGIpIHsgcmV0dXJuIGRvSGFuZGxlQmluZGluZyhjbSwgYiwgdHJ1ZSk7IH0pOworICAgIGlmICho
YW5kbGVkKSB7CisgICAgICBlX3ByZXZlbnREZWZhdWx0KGUpOworICAgICAgcmVzdGFydEJsaW5r
KGNtKTsKKyAgICB9CisgICAgcmV0dXJuIGhhbmRsZWQ7CisgIH0KKworICB2YXIgbGFzdFN0b3Bw
ZWRLZXkgPSBudWxsOworICBmdW5jdGlvbiBvbktleURvd24oZSkgeworICAgIHZhciBjbSA9IHRo
aXM7CisgICAgaWYgKCFjbS52aWV3LmZvY3VzZWQpIG9uRm9jdXMoY20pOworICAgIGlmIChpZSAm
JiBlLmtleUNvZGUgPT0gMjcpIHsgZS5yZXR1cm5WYWx1ZSA9IGZhbHNlOyB9CisgICAgaWYgKGNt
LmRpc3BsYXkucG9sbGluZ0Zhc3QpIHsgaWYgKHJlYWRJbnB1dChjbSkpIGNtLmRpc3BsYXkucG9s
bGluZ0Zhc3QgPSBmYWxzZTsgfQorICAgIGlmIChjbS5vcHRpb25zLm9uS2V5RXZlbnQgJiYgY20u
b3B0aW9ucy5vbktleUV2ZW50KGNtLCBhZGRTdG9wKGUpKSkgcmV0dXJuOworICAgIHZhciBjb2Rl
ID0gZV9wcm9wKGUsICJrZXlDb2RlIik7CisgICAgLy8gSUUgZG9lcyBzdHJhbmdlIHRoaW5ncyB3
aXRoIGVzY2FwZS4KKyAgICBzZXRTaGlmdChjbS52aWV3LCBjb2RlID09IDE2IHx8IGVfcHJvcChl
LCAic2hpZnRLZXkiKSk7CisgICAgLy8gRmlyc3QgZ2l2ZSBvbktleUV2ZW50IG9wdGlvbiBhIGNo
YW5jZSB0byBoYW5kbGUgdGhpcy4KKyAgICB2YXIgaGFuZGxlZCA9IGhhbmRsZUtleUJpbmRpbmco
Y20sIGUpOworICAgIGlmIChvcGVyYSkgeworICAgICAgbGFzdFN0b3BwZWRLZXkgPSBoYW5kbGVk
ID8gY29kZSA6IG51bGw7CisgICAgICAvLyBPcGVyYSBoYXMgbm8gY3V0IGV2ZW50Li4uIHdlIHRy
eSB0byBhdCBsZWFzdCBjYXRjaCB0aGUga2V5IGNvbWJvCisgICAgICBpZiAoIWhhbmRsZWQgJiYg
Y29kZSA9PSA4OCAmJiBlX3Byb3AoZSwgbWFjID8gIm1ldGFLZXkiIDogImN0cmxLZXkiKSkKKyAg
ICAgICAgY20ucmVwbGFjZVNlbGVjdGlvbigiIik7CisgICAgfQorICB9CisKKyAgZnVuY3Rpb24g
b25LZXlQcmVzcyhlKSB7CisgICAgdmFyIGNtID0gdGhpczsKKyAgICBpZiAoY20uZGlzcGxheS5w
b2xsaW5nRmFzdCkgcmVhZElucHV0KGNtKTsKKyAgICBpZiAoY20ub3B0aW9ucy5vbktleUV2ZW50
ICYmIGNtLm9wdGlvbnMub25LZXlFdmVudChjbSwgYWRkU3RvcChlKSkpIHJldHVybjsKKyAgICB2
YXIga2V5Q29kZSA9IGVfcHJvcChlLCAia2V5Q29kZSIpLCBjaGFyQ29kZSA9IGVfcHJvcChlLCAi
Y2hhckNvZGUiKTsKKyAgICBpZiAob3BlcmEgJiYga2V5Q29kZSA9PSBsYXN0U3RvcHBlZEtleSkg
e2xhc3RTdG9wcGVkS2V5ID0gbnVsbDsgZV9wcmV2ZW50RGVmYXVsdChlKTsgcmV0dXJuO30KKyAg
ICBpZiAoKChvcGVyYSAmJiAoIWUud2hpY2ggfHwgZS53aGljaCA8IDEwKSkgfHwga2h0bWwpICYm
IGhhbmRsZUtleUJpbmRpbmcoY20sIGUpKSByZXR1cm47CisgICAgdmFyIGNoID0gU3RyaW5nLmZy
b21DaGFyQ29kZShjaGFyQ29kZSA9PSBudWxsID8ga2V5Q29kZSA6IGNoYXJDb2RlKTsKKyAgICBp
ZiAodGhpcy5vcHRpb25zLmVsZWN0cmljQ2hhcnMgJiYgdGhpcy52aWV3Lm1vZGUuZWxlY3RyaWND
aGFycyAmJgorICAgICAgICB0aGlzLm9wdGlvbnMuc21hcnRJbmRlbnQgJiYgIWlzUmVhZE9ubHko
dGhpcykgJiYKKyAgICAgICAgdGhpcy52aWV3Lm1vZGUuZWxlY3RyaWNDaGFycy5pbmRleE9mKGNo
KSA+IC0xKQorICAgICAgc2V0VGltZW91dChvcGVyYXRpb24oY20sIGZ1bmN0aW9uKCkge2luZGVu
dExpbmUoY20sIGNtLnZpZXcuc2VsLnRvLmxpbmUsICJzbWFydCIpO30pLCA3NSk7CisgICAgaWYg
KGhhbmRsZUNoYXJCaW5kaW5nKGNtLCBlLCBjaCkpIHJldHVybjsKKyAgICBmYXN0UG9sbChjbSk7
CisgIH0KKworICBmdW5jdGlvbiBvbkZvY3VzKGNtKSB7CisgICAgaWYgKGNtLm9wdGlvbnMucmVh
ZE9ubHkgPT0gIm5vY3Vyc29yIikgcmV0dXJuOworICAgIGlmICghY20udmlldy5mb2N1c2VkKSB7
CisgICAgICBzaWduYWwoY20sICJmb2N1cyIsIGNtKTsKKyAgICAgIGNtLnZpZXcuZm9jdXNlZCA9
IHRydWU7CisgICAgICBpZiAoY20uZGlzcGxheS5zY3JvbGxlci5jbGFzc05hbWUuc2VhcmNoKC9c
YkNvZGVNaXJyb3ItZm9jdXNlZFxiLykgPT0gLTEpCisgICAgICAgIGNtLmRpc3BsYXkuc2Nyb2xs
ZXIuY2xhc3NOYW1lICs9ICIgQ29kZU1pcnJvci1mb2N1c2VkIjsKKyAgICAgIHJlc2V0SW5wdXQo
Y20sIHRydWUpOworICAgIH0KKyAgICBzbG93UG9sbChjbSk7CisgICAgcmVzdGFydEJsaW5rKGNt
KTsKKyAgfQorICBmdW5jdGlvbiBvbkJsdXIoY20pIHsKKyAgICBpZiAoY20udmlldy5mb2N1c2Vk
KSB7CisgICAgICBzaWduYWwoY20sICJibHVyIiwgY20pOworICAgICAgY20udmlldy5mb2N1c2Vk
ID0gZmFsc2U7CisgICAgICBjbS5kaXNwbGF5LnNjcm9sbGVyLmNsYXNzTmFtZSA9IGNtLmRpc3Bs
YXkuc2Nyb2xsZXIuY2xhc3NOYW1lLnJlcGxhY2UoIiBDb2RlTWlycm9yLWZvY3VzZWQiLCAiIik7
CisgICAgfQorICAgIGNsZWFySW50ZXJ2YWwoY20uZGlzcGxheS5ibGlua2VyKTsKKyAgICBzZXRU
aW1lb3V0KGZ1bmN0aW9uKCkge2lmICghY20udmlldy5mb2N1c2VkKSBjbS52aWV3LnNlbC5zaGlm
dCA9IG51bGw7fSwgMTUwKTsKKyAgfQorCisgIHZhciBkZXRlY3RpbmdTZWxlY3RBbGw7CisgIGZ1
bmN0aW9uIG9uQ29udGV4dE1lbnUoY20sIGUpIHsKKyAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3Bs
YXksIHNlbCA9IGNtLnZpZXcuc2VsOworICAgIHZhciBwb3MgPSBwb3NGcm9tTW91c2UoY20sIGUp
LCBzY3JvbGxQb3MgPSBkaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcDsKKyAgICBpZiAoIXBvcyB8
fCBvcGVyYSkgcmV0dXJuOyAvLyBPcGVyYSBpcyBkaWZmaWN1bHQuCisgICAgaWYgKHBvc0VxKHNl
bC5mcm9tLCBzZWwudG8pIHx8IHBvc0xlc3MocG9zLCBzZWwuZnJvbSkgfHwgIXBvc0xlc3MocG9z
LCBzZWwudG8pKQorICAgICAgb3BlcmF0aW9uKGNtLCBzZXRTZWxlY3Rpb24pKGNtLCBwb3MsIHBv
cyk7CisKKyAgICB2YXIgb2xkQ1NTID0gZGlzcGxheS5pbnB1dC5zdHlsZS5jc3NUZXh0OworICAg
IGRpc3BsYXkuaW5wdXREaXYuc3R5bGUucG9zaXRpb24gPSAiYWJzb2x1dGUiOworICAgIGRpc3Bs
YXkuaW5wdXQuc3R5bGUuY3NzVGV4dCA9ICJwb3NpdGlvbjogZml4ZWQ7IHdpZHRoOiAzMHB4OyBo
ZWlnaHQ6IDMwcHg7IHRvcDogIiArIChlLmNsaWVudFkgLSA1KSArCisgICAgICAicHg7IGxlZnQ6
ICIgKyAoZS5jbGllbnRYIC0gNSkgKyAicHg7IHotaW5kZXg6IDEwMDA7IGJhY2tncm91bmQ6IHdo
aXRlOyBvdXRsaW5lOiBub25lOyIgKworICAgICAgImJvcmRlci13aWR0aDogMDsgb3V0bGluZTog
bm9uZTsgb3ZlcmZsb3c6IGhpZGRlbjsgb3BhY2l0eTogLjA1OyBmaWx0ZXI6IGFscGhhKG9wYWNp
dHk9NSk7IjsKKyAgICBmb2N1c0lucHV0KGNtKTsKKyAgICByZXNldElucHV0KGNtLCB0cnVlKTsK
KyAgICAvLyBBZGRzICJTZWxlY3QgYWxsIiB0byBjb250ZXh0IG1lbnUgaW4gRkYKKyAgICBpZiAo
cG9zRXEoc2VsLmZyb20sIHNlbC50bykpIGRpc3BsYXkuaW5wdXQudmFsdWUgPSBkaXNwbGF5LnBy
ZXZJbnB1dCA9ICIgIjsKKworICAgIGZ1bmN0aW9uIHJlaGlkZSgpIHsKKyAgICAgIGRpc3BsYXku
aW5wdXREaXYuc3R5bGUucG9zaXRpb24gPSAicmVsYXRpdmUiOworICAgICAgZGlzcGxheS5pbnB1
dC5zdHlsZS5jc3NUZXh0ID0gb2xkQ1NTOworICAgICAgaWYgKGllX2x0OSkgZGlzcGxheS5zY3Jv
bGxiYXJWLnNjcm9sbFRvcCA9IGRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wID0gc2Nyb2xsUG9z
OworICAgICAgc2xvd1BvbGwoY20pOworCisgICAgICAvLyBUcnkgdG8gZGV0ZWN0IHRoZSB1c2Vy
IGNob29zaW5nIHNlbGVjdC1hbGwgCisgICAgICBpZiAoZGlzcGxheS5pbnB1dC5zZWxlY3Rpb25T
dGFydCAhPSBudWxsKSB7CisgICAgICAgIGNsZWFyVGltZW91dChkZXRlY3RpbmdTZWxlY3RBbGwp
OworICAgICAgICB2YXIgZXh0dmFsID0gZGlzcGxheS5pbnB1dC52YWx1ZSA9ICIgIiArIChwb3NF
cShzZWwuZnJvbSwgc2VsLnRvKSA/ICIiIDogZGlzcGxheS5pbnB1dC52YWx1ZSksIGkgPSAwOwor
ICAgICAgICBkaXNwbGF5LnByZXZJbnB1dCA9ICIgIjsKKyAgICAgICAgZGlzcGxheS5pbnB1dC5z
ZWxlY3Rpb25TdGFydCA9IDE7IGRpc3BsYXkuaW5wdXQuc2VsZWN0aW9uRW5kID0gZXh0dmFsLmxl
bmd0aDsKKyAgICAgICAgZGV0ZWN0aW5nU2VsZWN0QWxsID0gc2V0VGltZW91dChmdW5jdGlvbiBw
b2xsKCl7CisgICAgICAgICAgaWYgKGRpc3BsYXkucHJldklucHV0ID09ICIgIiAmJiBkaXNwbGF5
LmlucHV0LnNlbGVjdGlvblN0YXJ0ID09IDApCisgICAgICAgICAgICBvcGVyYXRpb24oY20sIGNv
bW1hbmRzLnNlbGVjdEFsbCkoY20pOworICAgICAgICAgIGVsc2UgaWYgKGkrKyA8IDEwKSBkZXRl
Y3RpbmdTZWxlY3RBbGwgPSBzZXRUaW1lb3V0KHBvbGwsIDUwMCk7CisgICAgICAgICAgZWxzZSBy
ZXNldElucHV0KGNtKTsKKyAgICAgICAgfSwgMjAwKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBp
ZiAoZ2Vja28pIHsKKyAgICAgIGVfc3RvcChlKTsKKyAgICAgIG9uKHdpbmRvdywgIm1vdXNldXAi
LCBmdW5jdGlvbiBtb3VzZXVwKCkgeworICAgICAgICBvZmYod2luZG93LCAibW91c2V1cCIsIG1v
dXNldXApOworICAgICAgICBzZXRUaW1lb3V0KHJlaGlkZSwgMjApOworICAgICAgfSk7CisgICAg
fSBlbHNlIHsKKyAgICAgIHNldFRpbWVvdXQocmVoaWRlLCA1MCk7CisgICAgfQorICB9CisKKyAg
Ly8gVVBEQVRJTkcKKworICAvLyBSZXBsYWNlIHRoZSByYW5nZSBmcm9tIGZyb20gdG8gdG8gYnkg
dGhlIHN0cmluZ3MgaW4gbmV3VGV4dC4KKyAgLy8gQWZ0ZXJ3YXJkcywgc2V0IHRoZSBzZWxlY3Rp
b24gdG8gc2VsRnJvbSwgc2VsVG8uCisgIGZ1bmN0aW9uIHVwZGF0ZURvYyhjbSwgZnJvbSwgdG8s
IG5ld1RleHQsIHNlbFVwZGF0ZSkgeworICAgIC8vIFBvc3NpYmx5IHNwbGl0IG9yIHN1cHByZXNz
IHRoZSB1cGRhdGUgYmFzZWQgb24gdGhlIHByZXNlbmNlCisgICAgLy8gb2YgcmVhZC1vbmx5IHNw
YW5zIGluIGl0cyByYW5nZS4KKyAgICB2YXIgc3BsaXQgPSBzYXdSZWFkT25seVNwYW5zICYmCisg
ICAgICByZW1vdmVSZWFkT25seVJhbmdlcyhjbS52aWV3LmRvYywgZnJvbSwgdG8pOworICAgIGlm
IChzcGxpdCkgeworICAgICAgZm9yICh2YXIgaSA9IHNwbGl0Lmxlbmd0aCAtIDE7IGkgPj0gMTsg
LS1pKQorICAgICAgICB1cGRhdGVEb2NJbm5lcihjbSwgc3BsaXRbaV0uZnJvbSwgc3BsaXRbaV0u
dG8sIFsiIl0pOworICAgICAgaWYgKHNwbGl0Lmxlbmd0aCkKKyAgICAgICAgcmV0dXJuIHVwZGF0
ZURvY0lubmVyKGNtLCBzcGxpdFswXS5mcm9tLCBzcGxpdFswXS50bywgbmV3VGV4dCwgc2VsVXBk
YXRlKTsKKyAgICB9IGVsc2UgeworICAgICAgcmV0dXJuIHVwZGF0ZURvY0lubmVyKGNtLCBmcm9t
LCB0bywgbmV3VGV4dCwgc2VsVXBkYXRlKTsKKyAgICB9CisgIH0KKworICBmdW5jdGlvbiB1cGRh
dGVEb2NJbm5lcihjbSwgZnJvbSwgdG8sIG5ld1RleHQsIHNlbFVwZGF0ZSkgeworICAgIGlmIChj
bS52aWV3LnN1cHByZXNzRWRpdHMpIHJldHVybjsKKworICAgIHZhciB2aWV3ID0gY20udmlldywg
ZG9jID0gdmlldy5kb2MsIG9sZCA9IFtdOworICAgIGRvYy5pdGVyKGZyb20ubGluZSwgdG8ubGlu
ZSArIDEsIGZ1bmN0aW9uKGxpbmUpIHsKKyAgICAgIG9sZC5wdXNoKG5ld0hMKGxpbmUudGV4dCwg
bGluZS5tYXJrZWRTcGFucykpOworICAgIH0pOworICAgIGlmICh2aWV3Lmhpc3RvcnkpIHsKKyAg
ICAgIGFkZENoYW5nZSh2aWV3Lmhpc3RvcnksIGZyb20ubGluZSwgbmV3VGV4dC5sZW5ndGgsIG9s
ZCk7CisgICAgICB3aGlsZSAodmlldy5oaXN0b3J5LmRvbmUubGVuZ3RoID4gY20ub3B0aW9ucy51
bmRvRGVwdGgpIHZpZXcuaGlzdG9yeS5kb25lLnNoaWZ0KCk7CisgICAgfQorICAgIHZhciBsaW5l
cyA9IHVwZGF0ZU1hcmtlZFNwYW5zKGhsU3BhbnMob2xkWzBdKSwgaGxTcGFucyhsc3Qob2xkKSks
IGZyb20uY2gsIHRvLmNoLCBuZXdUZXh0KTsKKyAgICByZXR1cm4gdXBkYXRlRG9jTm9VbmRvKGNt
LCBmcm9tLCB0bywgbGluZXMsIHNlbFVwZGF0ZSk7CisgIH0KKworICBmdW5jdGlvbiB1bnJlZG9I
ZWxwZXIoY20sIGZyb20sIHRvLCBkaXIpIHsKKyAgICB2YXIgZG9jID0gY20udmlldy5kb2MsIGhp
c3QgPSBjbS52aWV3Lmhpc3Rvcnk7CisgICAgaWYgKCFmcm9tLmxlbmd0aCkgcmV0dXJuOworICAg
IHZhciBzZXQgPSBmcm9tLnBvcCgpLCBvdXQgPSBbXTsKKyAgICBmb3IgKHZhciBpID0gc2V0Lmxl
bmd0aCAtIDE7IGkgPj0gMDsgaSAtPSAxKSB7CisgICAgICBoaXN0LmRpcnR5Q291bnRlciArPSBk
aXI7CisgICAgICB2YXIgY2hhbmdlID0gc2V0W2ldOworICAgICAgdmFyIHJlcGxhY2VkID0gW10s
IGVuZCA9IGNoYW5nZS5zdGFydCArIGNoYW5nZS5hZGRlZDsKKyAgICAgIGRvYy5pdGVyKGNoYW5n
ZS5zdGFydCwgZW5kLCBmdW5jdGlvbihsaW5lKSB7IHJlcGxhY2VkLnB1c2gobmV3SEwobGluZS50
ZXh0LCBsaW5lLm1hcmtlZFNwYW5zKSk7IH0pOworICAgICAgb3V0LnB1c2goe3N0YXJ0OiBjaGFu
Z2Uuc3RhcnQsIGFkZGVkOiBjaGFuZ2Uub2xkLmxlbmd0aCwgb2xkOiByZXBsYWNlZH0pOworICAg
ICAgdmFyIHBvcyA9IHtsaW5lOiBjaGFuZ2Uuc3RhcnQgKyBjaGFuZ2Uub2xkLmxlbmd0aCAtIDEs
CisgICAgICAgICAgICAgICAgIGNoOiBlZGl0RW5kKGhsVGV4dChsc3QocmVwbGFjZWQpKSwgaGxU
ZXh0KGxzdChjaGFuZ2Uub2xkKSkpfTsKKyAgICAgIHVwZGF0ZURvY05vVW5kbyhjbSwge2xpbmU6
IGNoYW5nZS5zdGFydCwgY2g6IDB9LCB7bGluZTogZW5kIC0gMSwgY2g6IGdldExpbmUoZG9jLCBl
bmQtMSkudGV4dC5sZW5ndGh9LAorICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZS5vbGQsIHBv
cyk7CisgICAgfQorICAgIHRvLnB1c2gob3V0KTsKKyAgfQorCisgIGZ1bmN0aW9uIHVwZGF0ZURv
Y05vVW5kbyhjbSwgZnJvbSwgdG8sIGxpbmVzLCBzZWxVcGRhdGUpIHsKKyAgICB2YXIgdmlldyA9
IGNtLnZpZXcsIGRvYyA9IHZpZXcuZG9jLCBkaXNwbGF5ID0gY20uZGlzcGxheTsKKyAgICBpZiAo
dmlldy5zdXBwcmVzc0VkaXRzKSByZXR1cm47CisKKyAgICB2YXIgbmxpbmVzID0gdG8ubGluZSAt
IGZyb20ubGluZSwgZmlyc3RMaW5lID0gZ2V0TGluZShkb2MsIGZyb20ubGluZSksIGxhc3RMaW5l
ID0gZ2V0TGluZShkb2MsIHRvLmxpbmUpOworICAgIHZhciByZWNvbXB1dGVNYXhMZW5ndGggPSBm
YWxzZSwgY2hlY2tXaWR0aFN0YXJ0ID0gZnJvbS5saW5lOworICAgIGlmICghY20ub3B0aW9ucy5s
aW5lV3JhcHBpbmcpIHsKKyAgICAgIGZvciAodmFyIGN1ciA9IGZpcnN0TGluZSwgbWVyZ2VkOyBt
ZXJnZWQgPSBjb2xsYXBzZWRTcGFuQXRTdGFydChjdXIpOykgeworICAgICAgICBjaGVja1dpZHRo
U3RhcnQgPSBtZXJnZWQuZmluZCgpLmZyb20ubGluZTsKKyAgICAgICAgY3VyID0gZ2V0TGluZShk
b2MsIGNoZWNrV2lkdGhTdGFydCk7CisgICAgICB9CisgICAgICBkb2MuaXRlcihjaGVja1dpZHRo
U3RhcnQsIHRvLmxpbmUgKyAxLCBmdW5jdGlvbihsaW5lKSB7CisgICAgICAgIGlmIChsaW5lTGVu
Z3RoKGRvYywgbGluZSkgPT0gdmlldy5tYXhMaW5lTGVuZ3RoKSB7CisgICAgICAgICAgcmVjb21w
dXRlTWF4TGVuZ3RoID0gdHJ1ZTsKICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQog
ICAgICAgfSk7CiAgICAgfQotICAgIGZ1bmN0aW9uIHNldExpbmVIaWRkZW4oaGFuZGxlLCBoaWRk
ZW4pIHsKLSAgICAgIHJldHVybiBjaGFuZ2VMaW5lKGhhbmRsZSwgZnVuY3Rpb24obGluZSwgbm8p
IHsKLSAgICAgICAgaWYgKGxpbmUuaGlkZGVuICE9IGhpZGRlbikgewotICAgICAgICAgIGxpbmUu
aGlkZGVuID0gaGlkZGVuOwotICAgICAgICAgIGlmICghb3B0aW9ucy5saW5lV3JhcHBpbmcpIHsK
LSAgICAgICAgICAgIGlmIChoaWRkZW4gJiYgbGluZS50ZXh0Lmxlbmd0aCA9PSBtYXhMaW5lLnRl
eHQubGVuZ3RoKSB7Ci0gICAgICAgICAgICAgIHVwZGF0ZU1heExpbmUgPSB0cnVlOwotICAgICAg
ICAgICAgfSBlbHNlIGlmICghaGlkZGVuICYmIGxpbmUudGV4dC5sZW5ndGggPiBtYXhMaW5lLnRl
eHQubGVuZ3RoKSB7Ci0gICAgICAgICAgICAgIG1heExpbmUgPSBsaW5lOyB1cGRhdGVNYXhMaW5l
ID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIHVwZGF0ZUxp
bmVIZWlnaHQobGluZSwgaGlkZGVuID8gMCA6IDEpOwotICAgICAgICAgIHZhciBmbGluZSA9IHNl
bC5mcm9tLmxpbmUsIHRsaW5lID0gc2VsLnRvLmxpbmU7Ci0gICAgICAgICAgaWYgKGhpZGRlbiAm
JiAoZmxpbmUgPT0gbm8gfHwgdGxpbmUgPT0gbm8pKSB7Ci0gICAgICAgICAgICB2YXIgZnJvbSA9
IGZsaW5lID09IG5vID8gc2tpcEhpZGRlbih7bGluZTogZmxpbmUsIGNoOiAwfSwgZmxpbmUsIDAp
IDogc2VsLmZyb207Ci0gICAgICAgICAgICB2YXIgdG8gPSB0bGluZSA9PSBubyA/IHNraXBIaWRk
ZW4oe2xpbmU6IHRsaW5lLCBjaDogMH0sIHRsaW5lLCAwKSA6IHNlbC50bzsKLSAgICAgICAgICAg
IC8vIENhbid0IGhpZGUgdGhlIGxhc3QgdmlzaWJsZSBsaW5lLCB3ZSdkIGhhdmUgbm8gcGxhY2Ug
dG8gcHV0IHRoZSBjdXJzb3IKLSAgICAgICAgICAgIGlmICghdG8pIHJldHVybjsKLSAgICAgICAg
ICAgIHNldFNlbGVjdGlvbihmcm9tLCB0byk7Ci0gICAgICAgICAgfQotICAgICAgICAgIHJldHVy
biAoZ3V0dGVyRGlydHkgPSB0cnVlKTsKKworICAgIHZhciBsYXN0SEwgPSBsc3QobGluZXMpLCB0
aCA9IHRleHRIZWlnaHQoZGlzcGxheSk7CisKKyAgICAvLyBGaXJzdCBhZGp1c3QgdGhlIGxpbmUg
c3RydWN0dXJlCisgICAgaWYgKGZyb20uY2ggPT0gMCAmJiB0by5jaCA9PSAwICYmIGhsVGV4dChs
YXN0SEwpID09ICIiKSB7CisgICAgICAvLyBUaGlzIGlzIGEgd2hvbGUtbGluZSByZXBsYWNlLiBU
cmVhdGVkIHNwZWNpYWxseSB0byBtYWtlCisgICAgICAvLyBzdXJlIGxpbmUgb2JqZWN0cyBtb3Zl
IHRoZSB3YXkgdGhleSBhcmUgc3VwcG9zZWQgdG8uCisgICAgICB2YXIgYWRkZWQgPSBbXSwgcHJl
dkxpbmUgPSBudWxsOworICAgICAgZm9yICh2YXIgaSA9IDAsIGUgPSBsaW5lcy5sZW5ndGggLSAx
OyBpIDwgZTsgKytpKQorICAgICAgICBhZGRlZC5wdXNoKG1ha2VMaW5lKGhsVGV4dChsaW5lc1tp
XSksIGhsU3BhbnMobGluZXNbaV0pLCB0aCkpOworICAgICAgdXBkYXRlTGluZShjbSwgbGFzdExp
bmUsIGxhc3RMaW5lLnRleHQsIGhsU3BhbnMobGFzdEhMKSk7CisgICAgICBpZiAobmxpbmVzKSBk
b2MucmVtb3ZlKGZyb20ubGluZSwgbmxpbmVzLCBjbSk7CisgICAgICBpZiAoYWRkZWQubGVuZ3Ro
KSBkb2MuaW5zZXJ0KGZyb20ubGluZSwgYWRkZWQpOworICAgIH0gZWxzZSBpZiAoZmlyc3RMaW5l
ID09IGxhc3RMaW5lKSB7CisgICAgICBpZiAobGluZXMubGVuZ3RoID09IDEpIHsKKyAgICAgICAg
dXBkYXRlTGluZShjbSwgZmlyc3RMaW5lLCBmaXJzdExpbmUudGV4dC5zbGljZSgwLCBmcm9tLmNo
KSArIGhsVGV4dChsaW5lc1swXSkgKworICAgICAgICAgICAgICAgICAgIGZpcnN0TGluZS50ZXh0
LnNsaWNlKHRvLmNoKSwgaGxTcGFucyhsaW5lc1swXSkpOworICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgZm9yICh2YXIgYWRkZWQgPSBbXSwgaSA9IDEsIGUgPSBsaW5lcy5sZW5ndGggLSAxOyBpIDwg
ZTsgKytpKQorICAgICAgICAgIGFkZGVkLnB1c2gobWFrZUxpbmUoaGxUZXh0KGxpbmVzW2ldKSwg
aGxTcGFucyhsaW5lc1tpXSksIHRoKSk7CisgICAgICAgIGFkZGVkLnB1c2gobWFrZUxpbmUoaGxU
ZXh0KGxhc3RITCkgKyBmaXJzdExpbmUudGV4dC5zbGljZSh0by5jaCksIGhsU3BhbnMobGFzdEhM
KSwgdGgpKTsKKyAgICAgICAgdXBkYXRlTGluZShjbSwgZmlyc3RMaW5lLCBmaXJzdExpbmUudGV4
dC5zbGljZSgwLCBmcm9tLmNoKSArIGhsVGV4dChsaW5lc1swXSksIGhsU3BhbnMobGluZXNbMF0p
KTsKKyAgICAgICAgZG9jLmluc2VydChmcm9tLmxpbmUgKyAxLCBhZGRlZCk7CisgICAgICB9Cisg
ICAgfSBlbHNlIGlmIChsaW5lcy5sZW5ndGggPT0gMSkgeworICAgICAgdXBkYXRlTGluZShjbSwg
Zmlyc3RMaW5lLCBmaXJzdExpbmUudGV4dC5zbGljZSgwLCBmcm9tLmNoKSArIGhsVGV4dChsaW5l
c1swXSkgKworICAgICAgICAgICAgICAgICBsYXN0TGluZS50ZXh0LnNsaWNlKHRvLmNoKSwgaGxT
cGFucyhsaW5lc1swXSkpOworICAgICAgZG9jLnJlbW92ZShmcm9tLmxpbmUgKyAxLCBubGluZXMs
IGNtKTsKKyAgICB9IGVsc2UgeworICAgICAgdmFyIGFkZGVkID0gW107CisgICAgICB1cGRhdGVM
aW5lKGNtLCBmaXJzdExpbmUsIGZpcnN0TGluZS50ZXh0LnNsaWNlKDAsIGZyb20uY2gpICsgaGxU
ZXh0KGxpbmVzWzBdKSwgaGxTcGFucyhsaW5lc1swXSkpOworICAgICAgdXBkYXRlTGluZShjbSwg
bGFzdExpbmUsIGhsVGV4dChsYXN0SEwpICsgbGFzdExpbmUudGV4dC5zbGljZSh0by5jaCksIGhs
U3BhbnMobGFzdEhMKSk7CisgICAgICBmb3IgKHZhciBpID0gMSwgZSA9IGxpbmVzLmxlbmd0aCAt
IDE7IGkgPCBlOyArK2kpCisgICAgICAgIGFkZGVkLnB1c2gobWFrZUxpbmUoaGxUZXh0KGxpbmVz
W2ldKSwgaGxTcGFucyhsaW5lc1tpXSksIHRoKSk7CisgICAgICBpZiAobmxpbmVzID4gMSkgZG9j
LnJlbW92ZShmcm9tLmxpbmUgKyAxLCBubGluZXMgLSAxLCBjbSk7CisgICAgICBkb2MuaW5zZXJ0
KGZyb20ubGluZSArIDEsIGFkZGVkKTsKKyAgICB9CisKKyAgICBpZiAoY20ub3B0aW9ucy5saW5l
V3JhcHBpbmcpIHsKKyAgICAgIHZhciBwZXJMaW5lID0gTWF0aC5tYXgoNSwgZGlzcGxheS5zY3Jv
bGxlci5jbGllbnRXaWR0aCAvIGNoYXJXaWR0aChkaXNwbGF5KSAtIDMpOworICAgICAgZG9jLml0
ZXIoZnJvbS5saW5lLCBmcm9tLmxpbmUgKyBsaW5lcy5sZW5ndGgsIGZ1bmN0aW9uKGxpbmUpIHsK
KyAgICAgICAgaWYgKGxpbmUuaGVpZ2h0ID09IDApIHJldHVybjsKKyAgICAgICAgdmFyIGd1ZXNz
ID0gKE1hdGguY2VpbChsaW5lLnRleHQubGVuZ3RoIC8gcGVyTGluZSkgfHwgMSkgKiB0aDsKKyAg
ICAgICAgaWYgKGd1ZXNzICE9IGxpbmUuaGVpZ2h0KSB1cGRhdGVMaW5lSGVpZ2h0KGxpbmUsIGd1
ZXNzKTsKKyAgICAgIH0pOworICAgIH0gZWxzZSB7CisgICAgICBkb2MuaXRlcihjaGVja1dpZHRo
U3RhcnQsIGZyb20ubGluZSArIGxpbmVzLmxlbmd0aCwgZnVuY3Rpb24obGluZSkgeworICAgICAg
ICB2YXIgbGVuID0gbGluZUxlbmd0aChkb2MsIGxpbmUpOworICAgICAgICBpZiAobGVuID4gdmll
dy5tYXhMaW5lTGVuZ3RoKSB7CisgICAgICAgICAgdmlldy5tYXhMaW5lID0gbGluZTsKKyAgICAg
ICAgICB2aWV3Lm1heExpbmVMZW5ndGggPSBsZW47CisgICAgICAgICAgdmlldy5tYXhMaW5lQ2hh
bmdlZCA9IHRydWU7CisgICAgICAgICAgcmVjb21wdXRlTWF4TGVuZ3RoID0gZmFsc2U7CiAgICAg
ICAgIH0KICAgICAgIH0pOworICAgICAgaWYgKHJlY29tcHV0ZU1heExlbmd0aCkgY20uY3VyT3Au
dXBkYXRlTWF4TGluZSA9IHRydWU7CiAgICAgfQogCi0gICAgZnVuY3Rpb24gbGluZUluZm8obGlu
ZSkgewotICAgICAgaWYgKHR5cGVvZiBsaW5lID09ICJudW1iZXIiKSB7Ci0gICAgICAgIGlmICgh
aXNMaW5lKGxpbmUpKSByZXR1cm4gbnVsbDsKLSAgICAgICAgdmFyIG4gPSBsaW5lOwotICAgICAg
ICBsaW5lID0gZ2V0TGluZShsaW5lKTsKLSAgICAgICAgaWYgKCFsaW5lKSByZXR1cm4gbnVsbDsK
LSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHZhciBuID0gbGluZU5vKGxpbmUpOwotICAgICAgICBp
ZiAobiA9PSBudWxsKSByZXR1cm4gbnVsbDsKKyAgICAvLyBBZGp1c3QgZnJvbnRpZXIsIHNjaGVk
dWxlIHdvcmtlcgorICAgIHZpZXcuZnJvbnRpZXIgPSBNYXRoLm1pbih2aWV3LmZyb250aWVyLCBm
cm9tLmxpbmUpOworICAgIHN0YXJ0V29ya2VyKGNtLCA0MDApOworCisgICAgdmFyIGxlbmRpZmYg
PSBsaW5lcy5sZW5ndGggLSBubGluZXMgLSAxOworICAgIC8vIFJlbWVtYmVyIHRoYXQgdGhlc2Ug
bGluZXMgY2hhbmdlZCwgZm9yIHVwZGF0aW5nIHRoZSBkaXNwbGF5CisgICAgcmVnQ2hhbmdlKGNt
LCBmcm9tLmxpbmUsIHRvLmxpbmUgKyAxLCBsZW5kaWZmKTsKKyAgICBpZiAoaGFzSGFuZGxlcihj
bSwgImNoYW5nZSIpKSB7CisgICAgICAvLyBOb3JtYWxpemUgbGluZXMgdG8gY29udGFpbiBvbmx5
IHN0cmluZ3MsIHNpbmNlIHRoYXQncyB3aGF0CisgICAgICAvLyB0aGUgY2hhbmdlIGV2ZW50IGhh
bmRsZXIgZXhwZWN0cworICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7ICsr
aSkKKyAgICAgICAgaWYgKHR5cGVvZiBsaW5lc1tpXSAhPSAic3RyaW5nIikgbGluZXNbaV0gPSBs
aW5lc1tpXS50ZXh0OworICAgICAgdmFyIGNoYW5nZU9iaiA9IHtmcm9tOiBmcm9tLCB0bzogdG8s
IHRleHQ6IGxpbmVzfTsKKyAgICAgIGlmIChjbS5jdXJPcC50ZXh0Q2hhbmdlZCkgeworICAgICAg
ICBmb3IgKHZhciBjdXIgPSBjbS5jdXJPcC50ZXh0Q2hhbmdlZDsgY3VyLm5leHQ7IGN1ciA9IGN1
ci5uZXh0KSB7fQorICAgICAgICBjdXIubmV4dCA9IGNoYW5nZU9iajsKKyAgICAgIH0gZWxzZSBj
bS5jdXJPcC50ZXh0Q2hhbmdlZCA9IGNoYW5nZU9iajsKKyAgICB9CisKKyAgICAvLyBVcGRhdGUg
dGhlIHNlbGVjdGlvbgorICAgIHZhciBuZXdTZWxGcm9tLCBuZXdTZWxUbywgZW5kID0ge2xpbmU6
IGZyb20ubGluZSArIGxpbmVzLmxlbmd0aCAtIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2g6IGhsVGV4dChsYXN0SEwpLmxlbmd0aCAgKyAobGluZXMubGVuZ3RoID09
IDEgPyBmcm9tLmNoIDogMCl9OworICAgIGlmICh0eXBlb2Ygc2VsVXBkYXRlID09ICJvYmplY3Qi
ICYmIHNlbFVwZGF0ZS5saW5lICE9IG51bGwpIHsKKyAgICAgIG5ld1NlbEZyb20gPSBuZXdTZWxU
byA9IHNlbFVwZGF0ZTsKKyAgICB9IGVsc2UgaWYgKHNlbFVwZGF0ZSA9PSAiZW5kIikgeworICAg
ICAgbmV3U2VsRnJvbSA9IG5ld1NlbFRvID0gZW5kOworICAgIH0gZWxzZSBpZiAoc2VsVXBkYXRl
ID09ICJzdGFydCIpIHsKKyAgICAgIG5ld1NlbEZyb20gPSBuZXdTZWxUbyA9IGZyb207CisgICAg
fSBlbHNlIGlmIChzZWxVcGRhdGUgPT0gImFyb3VuZCIpIHsKKyAgICAgIG5ld1NlbEZyb20gPSBm
cm9tOyBuZXdTZWxUbyA9IGVuZDsKKyAgICB9IGVsc2UgeworICAgICAgdmFyIGFkanVzdFBvcyA9
IGZ1bmN0aW9uKHBvcykgeworICAgICAgICBpZiAocG9zTGVzcyhwb3MsIGZyb20pKSByZXR1cm4g
cG9zOworICAgICAgICBpZiAoIXBvc0xlc3ModG8sIHBvcykpIHJldHVybiBlbmQ7CisgICAgICAg
IHZhciBsaW5lID0gcG9zLmxpbmUgKyBsZW5kaWZmOworICAgICAgICB2YXIgY2ggPSBwb3MuY2g7
CisgICAgICAgIGlmIChwb3MubGluZSA9PSB0by5saW5lKQorICAgICAgICAgIGNoICs9IGhsVGV4
dChsYXN0SEwpLmxlbmd0aCAtICh0by5jaCAtICh0by5saW5lID09IGZyb20ubGluZSA/IGZyb20u
Y2ggOiAwKSk7CisgICAgICAgIHJldHVybiB7bGluZTogbGluZSwgY2g6IGNofTsKKyAgICAgIH07
CisgICAgICBuZXdTZWxGcm9tID0gYWRqdXN0UG9zKHZpZXcuc2VsLmZyb20pOworICAgICAgbmV3
U2VsVG8gPSBhZGp1c3RQb3Modmlldy5zZWwudG8pOworICAgIH0KKyAgICBzZXRTZWxlY3Rpb24o
Y20sIG5ld1NlbEZyb20sIG5ld1NlbFRvLCBudWxsLCB0cnVlKTsKKyAgICByZXR1cm4gZW5kOwor
ICB9CisKKyAgZnVuY3Rpb24gcmVwbGFjZVJhbmdlKGNtLCBjb2RlLCBmcm9tLCB0bykgeworICAg
IGlmICghdG8pIHRvID0gZnJvbTsKKyAgICBpZiAocG9zTGVzcyh0bywgZnJvbSkpIHsgdmFyIHRt
cCA9IHRvOyB0byA9IGZyb207IGZyb20gPSB0bXA7IH0KKyAgICBjb2RlID0gc3BsaXRMaW5lcyhj
b2RlKTsKKyAgICBmdW5jdGlvbiBhZGp1c3RQb3MocG9zKSB7CisgICAgICBpZiAocG9zTGVzcyhw
b3MsIGZyb20pKSByZXR1cm4gcG9zOworICAgICAgaWYgKCFwb3NMZXNzKHRvLCBwb3MpKSByZXR1
cm4gZW5kOworICAgICAgdmFyIGxpbmUgPSBwb3MubGluZSArIGNvZGUubGVuZ3RoIC0gKHRvLmxp
bmUgLSBmcm9tLmxpbmUpIC0gMTsKKyAgICAgIHZhciBjaCA9IHBvcy5jaDsKKyAgICAgIGlmIChw
b3MubGluZSA9PSB0by5saW5lKQorICAgICAgICBjaCArPSBsc3QoY29kZSkubGVuZ3RoIC0gKHRv
LmNoIC0gKHRvLmxpbmUgPT0gZnJvbS5saW5lID8gZnJvbS5jaCA6IDApKTsKKyAgICAgIHJldHVy
biB7bGluZTogbGluZSwgY2g6IGNofTsKKyAgICB9CisgICAgcmV0dXJuIHVwZGF0ZURvYyhjbSwg
ZnJvbSwgdG8sIGNvZGUpOworICB9CisKKyAgLy8gU0VMRUNUSU9OCisKKyAgZnVuY3Rpb24gcG9z
RXEoYSwgYikge3JldHVybiBhLmxpbmUgPT0gYi5saW5lICYmIGEuY2ggPT0gYi5jaDt9CisgIGZ1
bmN0aW9uIHBvc0xlc3MoYSwgYikge3JldHVybiBhLmxpbmUgPCBiLmxpbmUgfHwgKGEubGluZSA9
PSBiLmxpbmUgJiYgYS5jaCA8IGIuY2gpO30KKyAgZnVuY3Rpb24gY29weVBvcyh4KSB7cmV0dXJu
IHtsaW5lOiB4LmxpbmUsIGNoOiB4LmNofTt9CisKKyAgZnVuY3Rpb24gY2xpcExpbmUoZG9jLCBu
KSB7cmV0dXJuIE1hdGgubWF4KDAsIE1hdGgubWluKG4sIGRvYy5zaXplLTEpKTt9CisgIGZ1bmN0
aW9uIGNsaXBQb3MoZG9jLCBwb3MpIHsKKyAgICBpZiAocG9zLmxpbmUgPCAwKSByZXR1cm4ge2xp
bmU6IDAsIGNoOiAwfTsKKyAgICBpZiAocG9zLmxpbmUgPj0gZG9jLnNpemUpIHJldHVybiB7bGlu
ZTogZG9jLnNpemUtMSwgY2g6IGdldExpbmUoZG9jLCBkb2Muc2l6ZS0xKS50ZXh0Lmxlbmd0aH07
CisgICAgdmFyIGNoID0gcG9zLmNoLCBsaW5lbGVuID0gZ2V0TGluZShkb2MsIHBvcy5saW5lKS50
ZXh0Lmxlbmd0aDsKKyAgICBpZiAoY2ggPT0gbnVsbCB8fCBjaCA+IGxpbmVsZW4pIHJldHVybiB7
bGluZTogcG9zLmxpbmUsIGNoOiBsaW5lbGVufTsKKyAgICBlbHNlIGlmIChjaCA8IDApIHJldHVy
biB7bGluZTogcG9zLmxpbmUsIGNoOiAwfTsKKyAgICBlbHNlIHJldHVybiBwb3M7CisgIH0KKyAg
ZnVuY3Rpb24gaXNMaW5lKGRvYywgbCkge3JldHVybiBsID49IDAgJiYgbCA8IGRvYy5zaXplO30K
KworICBmdW5jdGlvbiBzZXRTaGlmdCh2aWV3LCB2YWwpIHsKKyAgICBpZiAodmFsKSB2aWV3LnNl
bC5zaGlmdCA9IHZpZXcuc2VsLnNoaWZ0IHx8IHNlbEhlYWQodmlldyk7CisgICAgZWxzZSB2aWV3
LnNlbC5zaGlmdCA9IG51bGw7CisgIH0KKyAgZnVuY3Rpb24gc2V0U2VsZWN0aW9uVXNlcihjbSwg
ZnJvbSwgdG8sIGJpYXMpIHsKKyAgICB2YXIgdmlldyA9IGNtLnZpZXcsIHNoID0gdmlldy5zZWwu
c2hpZnQ7CisgICAgaWYgKHNoKSB7CisgICAgICBzaCA9IGNsaXBQb3Modmlldy5kb2MsIHNoKTsK
KyAgICAgIGlmIChwb3NMZXNzKHNoLCBmcm9tKSkgZnJvbSA9IHNoOworICAgICAgZWxzZSBpZiAo
cG9zTGVzcyh0bywgc2gpKSB0byA9IHNoOworICAgIH0KKyAgICBzZXRTZWxlY3Rpb24oY20sIGZy
b20sIHRvLCBiaWFzKTsKKyAgICBjbS5jdXJPcC51c2VyU2VsQ2hhbmdlID0gdHJ1ZTsKKyAgfQor
CisgIC8vIFVwZGF0ZSB0aGUgc2VsZWN0aW9uLiBMYXN0IHR3byBhcmdzIGFyZSBvbmx5IHVzZWQg
YnkKKyAgLy8gdXBkYXRlRG9jLCBzaW5jZSB0aGV5IGhhdmUgdG8gYmUgZXhwcmVzc2VkIGluIHRo
ZSBsaW5lCisgIC8vIG51bWJlcnMgYmVmb3JlIHRoZSB1cGRhdGUuCisgIGZ1bmN0aW9uIHNldFNl
bGVjdGlvbihjbSwgZnJvbSwgdG8sIGJpYXMsIGNoZWNrQXRvbWljKSB7CisgICAgY20uY3VyT3Au
dXBkYXRlSW5wdXQgPSB0cnVlOworICAgIHZhciBzZWwgPSBjbS52aWV3LnNlbCwgZG9jID0gY20u
dmlldy5kb2M7CisgICAgY20udmlldy5nb2FsQ29sdW1uID0gbnVsbDsKKyAgICBpZiAoIWNoZWNr
QXRvbWljICYmIHBvc0VxKHNlbC5mcm9tLCBmcm9tKSAmJiBwb3NFcShzZWwudG8sIHRvKSkgcmV0
dXJuOworICAgIGlmIChwb3NMZXNzKHRvLCBmcm9tKSkge3ZhciB0bXAgPSB0bzsgdG8gPSBmcm9t
OyBmcm9tID0gdG1wO30KKworICAgIC8vIFNraXAgb3ZlciBhdG9taWMgc3BhbnMuCisgICAgaWYg
KGNoZWNrQXRvbWljIHx8ICFwb3NFcShmcm9tLCBzZWwuZnJvbSkpCisgICAgICBmcm9tID0gc2tp
cEF0b21pYyhjbSwgZnJvbSwgYmlhcywgY2hlY2tBdG9taWMgIT0gInB1c2giKTsKKyAgICBpZiAo
Y2hlY2tBdG9taWMgfHwgIXBvc0VxKHRvLCBzZWwudG8pKQorICAgICAgdG8gPSBza2lwQXRvbWlj
KGNtLCB0bywgYmlhcywgY2hlY2tBdG9taWMgIT0gInB1c2giKTsKKworICAgIGlmIChwb3NFcShm
cm9tLCB0bykpIHNlbC5pbnZlcnRlZCA9IGZhbHNlOworICAgIGVsc2UgaWYgKHBvc0VxKGZyb20s
IHNlbC50bykpIHNlbC5pbnZlcnRlZCA9IGZhbHNlOworICAgIGVsc2UgaWYgKHBvc0VxKHRvLCBz
ZWwuZnJvbSkpIHNlbC5pbnZlcnRlZCA9IHRydWU7CisKKyAgICBpZiAoY20ub3B0aW9ucy5hdXRv
Q2xlYXJFbXB0eUxpbmVzICYmIHBvc0VxKHNlbC5mcm9tLCBzZWwudG8pKSB7CisgICAgICB2YXIg
aGVhZCA9IHNlbEhlYWQoY20udmlldyk7CisgICAgICBpZiAoaGVhZC5saW5lICE9IHNlbC5mcm9t
LmxpbmUgJiYgc2VsLmZyb20ubGluZSA8IGRvYy5zaXplKSB7CisgICAgICAgIHZhciBvbGRMaW5l
ID0gZ2V0TGluZShkb2MsIHNlbC5mcm9tLmxpbmUpOworICAgICAgICBpZiAoL15ccyskLy50ZXN0
KG9sZExpbmUudGV4dCkpCisgICAgICAgICAgc2V0VGltZW91dChvcGVyYXRpb24oY20sIGZ1bmN0
aW9uKCkgeworICAgICAgICAgICAgaWYgKG9sZExpbmUucGFyZW50ICYmIC9eXHMrJC8udGVzdChv
bGRMaW5lLnRleHQpKSB7CisgICAgICAgICAgICAgIHZhciBubyA9IGxpbmVObyhvbGRMaW5lKTsK
KyAgICAgICAgICAgICAgcmVwbGFjZVJhbmdlKGNtLCAiIiwge2xpbmU6IG5vLCBjaDogMH0sIHts
aW5lOiBubywgY2g6IG9sZExpbmUudGV4dC5sZW5ndGh9KTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICB9LCAxMCkpOwogICAgICAgfQotICAgICAgdmFyIG1hcmtlciA9IGxpbmUuZ3V0dGVyTWFy
a2VyOwotICAgICAgcmV0dXJuIHtsaW5lOiBuLCBoYW5kbGU6IGxpbmUsIHRleHQ6IGxpbmUudGV4
dCwgbWFya2VyVGV4dDogbWFya2VyICYmIG1hcmtlci50ZXh0LAotICAgICAgICAgICAgICBtYXJr
ZXJDbGFzczogbWFya2VyICYmIG1hcmtlci5zdHlsZSwgbGluZUNsYXNzOiBsaW5lLmNsYXNzTmFt
ZSwgYmdDbGFzczogbGluZS5iZ0NsYXNzTmFtZX07CiAgICAgfQogCi0gICAgLy8gVGhlc2UgYXJl
IHVzZWQgdG8gZ28gZnJvbSBwaXhlbCBwb3NpdGlvbnMgdG8gY2hhcmFjdGVyCi0gICAgLy8gcG9z
aXRpb25zLCB0YWtpbmcgdmFyeWluZyBjaGFyYWN0ZXIgd2lkdGhzIGludG8gYWNjb3VudC4KLSAg
ICBmdW5jdGlvbiBjaGFyRnJvbVgobGluZSwgeCkgewotICAgICAgaWYgKHggPD0gMCkgcmV0dXJu
IDA7Ci0gICAgICB2YXIgbGluZU9iaiA9IGdldExpbmUobGluZSksIHRleHQgPSBsaW5lT2JqLnRl
eHQ7Ci0gICAgICBmdW5jdGlvbiBnZXRYKGxlbikgewotICAgICAgICByZXR1cm4gbWVhc3VyZUxp
bmUobGluZU9iaiwgbGVuKS5sZWZ0OworICAgIHNlbC5mcm9tID0gZnJvbTsgc2VsLnRvID0gdG87
CisgICAgY20uY3VyT3Auc2VsZWN0aW9uQ2hhbmdlZCA9IHRydWU7CisgIH0KKworICBmdW5jdGlv
biByZUNoZWNrU2VsZWN0aW9uKGNtKSB7CisgICAgc2V0U2VsZWN0aW9uKGNtLCBjbS52aWV3LnNl
bC5mcm9tLCBjbS52aWV3LnNlbC50bywgbnVsbCwgInB1c2giKTsKKyAgfQorCisgIGZ1bmN0aW9u
IHNraXBBdG9taWMoY20sIHBvcywgYmlhcywgbWF5Q2xlYXIpIHsKKyAgICB2YXIgZG9jID0gY20u
dmlldy5kb2MsIGZsaXBwZWQgPSBmYWxzZSwgY3VyUG9zID0gcG9zOworICAgIHZhciBkaXIgPSBi
aWFzIHx8IDE7CisgICAgY20udmlldy5jYW50RWRpdCA9IGZhbHNlOworICAgIHNlYXJjaDogZm9y
ICg7OykgeworICAgICAgdmFyIGxpbmUgPSBnZXRMaW5lKGRvYywgY3VyUG9zLmxpbmUpLCB0b0Ns
ZWFyOworICAgICAgaWYgKGxpbmUubWFya2VkU3BhbnMpIHsKKyAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBsaW5lLm1hcmtlZFNwYW5zLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgdmFyIHNw
ID0gbGluZS5tYXJrZWRTcGFuc1tpXSwgbSA9IHNwLm1hcmtlcjsKKyAgICAgICAgICBpZiAoKHNw
LmZyb20gPT0gbnVsbCB8fCAobS5pbmNsdXNpdmVMZWZ0ID8gc3AuZnJvbSA8PSBjdXJQb3MuY2gg
OiBzcC5mcm9tIDwgY3VyUG9zLmNoKSkgJiYKKyAgICAgICAgICAgICAgKHNwLnRvID09IG51bGwg
fHwgKG0uaW5jbHVzaXZlUmlnaHQgPyBzcC50byA+PSBjdXJQb3MuY2ggOiBzcC50byA+IGN1clBv
cy5jaCkpKSB7CisgICAgICAgICAgICBpZiAobWF5Q2xlYXIgJiYgbS5jbGVhck9uRW50ZXIpIHsK
KyAgICAgICAgICAgICAgKHRvQ2xlYXIgfHwgKHRvQ2xlYXIgPSBbXSkpLnB1c2gobSk7CisgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfSBlbHNlIGlmICghbS5hdG9taWMpIGNv
bnRpbnVlOworICAgICAgICAgICAgdmFyIG5ld1BvcyA9IG0uZmluZCgpW2RpciA8IDAgPyAiZnJv
bSIgOiAidG8iXTsKKyAgICAgICAgICAgIGlmIChwb3NFcShuZXdQb3MsIGN1clBvcykpIHsKKyAg
ICAgICAgICAgICAgbmV3UG9zLmNoICs9IGRpcjsKKyAgICAgICAgICAgICAgaWYgKG5ld1Bvcy5j
aCA8IDApIHsKKyAgICAgICAgICAgICAgICBpZiAobmV3UG9zLmxpbmUpIG5ld1BvcyA9IGNsaXBQ
b3MoZG9jLCB7bGluZTogbmV3UG9zLmxpbmUgLSAxfSk7CisgICAgICAgICAgICAgICAgZWxzZSBu
ZXdQb3MgPSBudWxsOworICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5ld1Bvcy5jaCA+IGxpbmUu
dGV4dC5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICBpZiAobmV3UG9zLmxpbmUgPCBkb2Muc2l6
ZSAtIDEpIG5ld1BvcyA9IHtsaW5lOiBuZXdQb3MubGluZSArIDEsIGNoOiAwfTsKKyAgICAgICAg
ICAgICAgICBlbHNlIG5ld1BvcyA9IG51bGw7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgaWYgKCFuZXdQb3MpIHsKKyAgICAgICAgICAgICAgICBpZiAoZmxpcHBlZCkgeworICAgICAg
ICAgICAgICAgICAgLy8gRHJpdmVuIGluIGEgY29ybmVyIC0tIG5vIHZhbGlkIGN1cnNvciBwb3Np
dGlvbiBmb3VuZCBhdCBhbGwKKyAgICAgICAgICAgICAgICAgIC8vIC0tIHRyeSBhZ2FpbiAqd2l0
aCogY2xlYXJpbmcsIGlmIHdlIGRpZG4ndCBhbHJlYWR5CisgICAgICAgICAgICAgICAgICBpZiAo
IW1heUNsZWFyKSByZXR1cm4gc2tpcEF0b21pYyhjbSwgcG9zLCBiaWFzLCB0cnVlKTsKKyAgICAg
ICAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgdHVybiBvZmYgZWRpdGluZyB1bnRpbCBmdXJ0aGVy
IG5vdGljZSwgYW5kIHJldHVybiB0aGUgc3RhcnQgb2YgdGhlIGRvYworICAgICAgICAgICAgICAg
ICAgY20udmlldy5jYW50RWRpdCA9IHRydWU7CisgICAgICAgICAgICAgICAgICByZXR1cm4ge2xp
bmU6IDAsIGNoOiAwfTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZmxpcHBl
ZCA9IHRydWU7IG5ld1BvcyA9IHBvczsgZGlyID0gLWRpcjsKKyAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgY3VyUG9zID0gbmV3UG9zOworICAgICAgICAgICAgY29u
dGludWUgc2VhcmNoOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAodG9DbGVh
cikgZm9yICh2YXIgaSA9IDA7IGkgPCB0b0NsZWFyLmxlbmd0aDsgKytpKSB0b0NsZWFyW2ldLmNs
ZWFyKCk7CiAgICAgICB9Ci0gICAgICB2YXIgZnJvbSA9IDAsIGZyb21YID0gMCwgdG8gPSB0ZXh0
Lmxlbmd0aCwgdG9YOwotICAgICAgLy8gR3Vlc3MgYSBzdWl0YWJsZSB1cHBlciBib3VuZCBmb3Ig
b3VyIHNlYXJjaC4KLSAgICAgIHZhciBlc3RpbWF0ZWQgPSBNYXRoLm1pbih0bywgTWF0aC5jZWls
KHggLyBjaGFyV2lkdGgoKSkpOwotICAgICAgZm9yICg7OykgewotICAgICAgICB2YXIgZXN0WCA9
IGdldFgoZXN0aW1hdGVkKTsKLSAgICAgICAgaWYgKGVzdFggPD0geCAmJiBlc3RpbWF0ZWQgPCB0
bykgZXN0aW1hdGVkID0gTWF0aC5taW4odG8sIE1hdGguY2VpbChlc3RpbWF0ZWQgKiAxLjIpKTsK
LSAgICAgICAgZWxzZSB7dG9YID0gZXN0WDsgdG8gPSBlc3RpbWF0ZWQ7IGJyZWFrO30KKyAgICAg
IHJldHVybiBjdXJQb3M7CisgICAgfQorICB9CisKKyAgLy8gU0NST0xMSU5HCisKKyAgZnVuY3Rp
b24gc2Nyb2xsQ3Vyc29ySW50b1ZpZXcoY20pIHsKKyAgICB2YXIgdmlldyA9IGNtLnZpZXcsIGNv
b3JkcyA9IGN1cnNvckNvb3JkcyhjbSwgc2VsSGVhZCh2aWV3KSk7CisgICAgc2Nyb2xsSW50b1Zp
ZXcoY20uZGlzcGxheSwgY29vcmRzLmxlZnQsIGNvb3Jkcy50b3AsIGNvb3Jkcy5sZWZ0LCBjb29y
ZHMuYm90dG9tKTsKKyAgICBpZiAoIXZpZXcuZm9jdXNlZCkgcmV0dXJuOworICAgIHZhciBkaXNw
bGF5ID0gY20uZGlzcGxheSwgYm94ID0gZGlzcGxheS5zaXplci5nZXRCb3VuZGluZ0NsaWVudFJl
Y3QoKSwgZG9TY3JvbGwgPSBudWxsOworICAgIGlmIChjb29yZHMudG9wICsgYm94LnRvcCA8IDAp
IGRvU2Nyb2xsID0gdHJ1ZTsKKyAgICBlbHNlIGlmIChjb29yZHMuYm90dG9tICsgYm94LnRvcCA+
ICh3aW5kb3cuaW5uZXJIZWlnaHQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhl
aWdodCkpIGRvU2Nyb2xsID0gZmFsc2U7CisgICAgaWYgKGRvU2Nyb2xsICE9IG51bGwgJiYgIXBo
YW50b20pIHsKKyAgICAgIHZhciBoaWRkZW4gPSBkaXNwbGF5LmN1cnNvci5zdHlsZS5kaXNwbGF5
ID09ICJub25lIjsKKyAgICAgIGlmIChoaWRkZW4pIHsKKyAgICAgICAgZGlzcGxheS5jdXJzb3Iu
c3R5bGUuZGlzcGxheSA9ICIiOworICAgICAgICBkaXNwbGF5LmN1cnNvci5zdHlsZS5sZWZ0ID0g
Y29vcmRzLmxlZnQgKyAicHgiOworICAgICAgICBkaXNwbGF5LmN1cnNvci5zdHlsZS50b3AgPSAo
Y29vcmRzLnRvcCAtIGRpc3BsYXkudmlld09mZnNldCkgKyAicHgiOwogICAgICAgfQotICAgICAg
aWYgKHggPiB0b1gpIHJldHVybiB0bzsKLSAgICAgIC8vIFRyeSB0byBndWVzcyBhIHN1aXRhYmxl
IGxvd2VyIGJvdW5kIGFzIHdlbGwuCi0gICAgICBlc3RpbWF0ZWQgPSBNYXRoLmZsb29yKHRvICog
MC44KTsgZXN0WCA9IGdldFgoZXN0aW1hdGVkKTsKLSAgICAgIGlmIChlc3RYIDwgeCkge2Zyb20g
PSBlc3RpbWF0ZWQ7IGZyb21YID0gZXN0WDt9Ci0gICAgICAvLyBEbyBhIGJpbmFyeSBzZWFyY2gg
YmV0d2VlbiB0aGVzZSBib3VuZHMuCisgICAgICBkaXNwbGF5LmN1cnNvci5zY3JvbGxJbnRvVmll
dyhkb1Njcm9sbCk7CisgICAgICBpZiAoaGlkZGVuKSBkaXNwbGF5LmN1cnNvci5zdHlsZS5kaXNw
bGF5ID0gIm5vbmUiOworICAgIH0KKyAgfQorCisgIGZ1bmN0aW9uIHNjcm9sbEludG9WaWV3KGRp
c3BsYXksIHgxLCB5MSwgeDIsIHkyKSB7CisgICAgdmFyIHNjcm9sbFBvcyA9IGNhbGN1bGF0ZVNj
cm9sbFBvcyhkaXNwbGF5LCB4MSwgeTEsIHgyLCB5Mik7CisgICAgaWYgKHNjcm9sbFBvcy5zY3Jv
bGxMZWZ0ICE9IG51bGwpIHtkaXNwbGF5LnNjcm9sbGJhckguc2Nyb2xsTGVmdCA9IGRpc3BsYXku
c2Nyb2xsZXIuc2Nyb2xsTGVmdCA9IHNjcm9sbFBvcy5zY3JvbGxMZWZ0O30KKyAgICBpZiAoc2Ny
b2xsUG9zLnNjcm9sbFRvcCAhPSBudWxsKSB7ZGlzcGxheS5zY3JvbGxiYXJWLnNjcm9sbFRvcCA9
IGRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wID0gc2Nyb2xsUG9zLnNjcm9sbFRvcDt9CisgIH0K
KworICBmdW5jdGlvbiBjYWxjdWxhdGVTY3JvbGxQb3MoZGlzcGxheSwgeDEsIHkxLCB4MiwgeTIp
IHsKKyAgICB2YXIgcHQgPSBwYWRkaW5nVG9wKGRpc3BsYXkpOworICAgIHkxICs9IHB0OyB5MiAr
PSBwdDsKKyAgICB2YXIgc2NyZWVuID0gZGlzcGxheS5zY3JvbGxlci5jbGllbnRIZWlnaHQgLSBz
Y3JvbGxlckN1dE9mZiwgc2NyZWVudG9wID0gZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3AsIHJl
c3VsdCA9IHt9OworICAgIHZhciBkb2NCb3R0b20gPSBkaXNwbGF5LnNjcm9sbGVyLnNjcm9sbEhl
aWdodCAtIHNjcm9sbGVyQ3V0T2ZmOworICAgIHZhciBhdFRvcCA9IHkxIDwgcHQgKyAxMCwgYXRC
b3R0b20gPSB5MiArIHB0ID4gZG9jQm90dG9tIC0gMTA7CisgICAgaWYgKHkxIDwgc2NyZWVudG9w
KSByZXN1bHQuc2Nyb2xsVG9wID0gYXRUb3AgPyAwIDogTWF0aC5tYXgoMCwgeTEpOworICAgIGVs
c2UgaWYgKHkyID4gc2NyZWVudG9wICsgc2NyZWVuKSByZXN1bHQuc2Nyb2xsVG9wID0gKGF0Qm90
dG9tID8gZG9jQm90dG9tIDogeTIgLSBzY3JlZW4pOworCisgICAgdmFyIHNjcmVlbncgPSBkaXNw
bGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoIC0gc2Nyb2xsZXJDdXRPZmYsIHNjcmVlbmxlZnQgPSBk
aXNwbGF5LnNjcm9sbGVyLnNjcm9sbExlZnQ7CisgICAgeDEgKz0gZGlzcGxheS5ndXR0ZXJzLm9m
ZnNldFdpZHRoOyB4MiArPSBkaXNwbGF5Lmd1dHRlcnMub2Zmc2V0V2lkdGg7CisgICAgdmFyIGd1
dHRlcncgPSBkaXNwbGF5Lmd1dHRlcnMub2Zmc2V0V2lkdGg7CisgICAgdmFyIGF0TGVmdCA9IHgx
IDwgZ3V0dGVydyArIDEwOworICAgIGlmICh4MSA8IHNjcmVlbmxlZnQgKyBndXR0ZXJ3IHx8IGF0
TGVmdCkgeworICAgICAgaWYgKGF0TGVmdCkgeDEgPSAwOworICAgICAgcmVzdWx0LnNjcm9sbExl
ZnQgPSBNYXRoLm1heCgwLCB4MSAtIDEwIC0gZ3V0dGVydyk7CisgICAgfSBlbHNlIGlmICh4MiA+
IHNjcmVlbncgKyBzY3JlZW5sZWZ0IC0gMykgeworICAgICAgcmVzdWx0LnNjcm9sbExlZnQgPSB4
MiArIDEwIC0gc2NyZWVudzsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorCisgIC8v
IEFQSSBVVElMSVRJRVMKKworICBmdW5jdGlvbiBpbmRlbnRMaW5lKGNtLCBuLCBob3cpIHsKKyAg
ICB2YXIgZG9jID0gY20udmlldy5kb2M7CisgICAgaWYgKCFob3cpIGhvdyA9ICJhZGQiOworICAg
IGlmIChob3cgPT0gInNtYXJ0IikgeworICAgICAgaWYgKCFjbS52aWV3Lm1vZGUuaW5kZW50KSBo
b3cgPSAicHJldiI7CisgICAgICBlbHNlIHZhciBzdGF0ZSA9IGdldFN0YXRlQmVmb3JlKGNtLCBu
KTsKKyAgICB9CisKKyAgICB2YXIgdGFiU2l6ZSA9IGNtLm9wdGlvbnMudGFiU2l6ZTsKKyAgICB2
YXIgbGluZSA9IGdldExpbmUoZG9jLCBuKSwgY3VyU3BhY2UgPSBjb3VudENvbHVtbihsaW5lLnRl
eHQsIG51bGwsIHRhYlNpemUpOworICAgIHZhciBjdXJTcGFjZVN0cmluZyA9IGxpbmUudGV4dC5t
YXRjaCgvXlxzKi8pWzBdLCBpbmRlbnRhdGlvbjsKKyAgICBpZiAoaG93ID09ICJzbWFydCIpIHsK
KyAgICAgIGluZGVudGF0aW9uID0gY20udmlldy5tb2RlLmluZGVudChzdGF0ZSwgbGluZS50ZXh0
LnNsaWNlKGN1clNwYWNlU3RyaW5nLmxlbmd0aCksIGxpbmUudGV4dCk7CisgICAgICBpZiAoaW5k
ZW50YXRpb24gPT0gUGFzcykgaG93ID0gInByZXYiOworICAgIH0KKyAgICBpZiAoaG93ID09ICJw
cmV2IikgeworICAgICAgaWYgKG4pIGluZGVudGF0aW9uID0gY291bnRDb2x1bW4oZ2V0TGluZShk
b2MsIG4tMSkudGV4dCwgbnVsbCwgdGFiU2l6ZSk7CisgICAgICBlbHNlIGluZGVudGF0aW9uID0g
MDsKKyAgICB9CisgICAgZWxzZSBpZiAoaG93ID09ICJhZGQiKSBpbmRlbnRhdGlvbiA9IGN1clNw
YWNlICsgY20ub3B0aW9ucy5pbmRlbnRVbml0OworICAgIGVsc2UgaWYgKGhvdyA9PSAic3VidHJh
Y3QiKSBpbmRlbnRhdGlvbiA9IGN1clNwYWNlIC0gY20ub3B0aW9ucy5pbmRlbnRVbml0OworICAg
IGluZGVudGF0aW9uID0gTWF0aC5tYXgoMCwgaW5kZW50YXRpb24pOworICAgIHZhciBkaWZmID0g
aW5kZW50YXRpb24gLSBjdXJTcGFjZTsKKworICAgIHZhciBpbmRlbnRTdHJpbmcgPSAiIiwgcG9z
ID0gMDsKKyAgICBpZiAoY20ub3B0aW9ucy5pbmRlbnRXaXRoVGFicykKKyAgICAgIGZvciAodmFy
IGkgPSBNYXRoLmZsb29yKGluZGVudGF0aW9uIC8gdGFiU2l6ZSk7IGk7IC0taSkge3BvcyArPSB0
YWJTaXplOyBpbmRlbnRTdHJpbmcgKz0gIlx0Ijt9CisgICAgaWYgKHBvcyA8IGluZGVudGF0aW9u
KSBpbmRlbnRTdHJpbmcgKz0gc3BhY2VTdHIoaW5kZW50YXRpb24gLSBwb3MpOworCisgICAgaWYg
KGluZGVudFN0cmluZyAhPSBjdXJTcGFjZVN0cmluZykKKyAgICAgIHJlcGxhY2VSYW5nZShjbSwg
aW5kZW50U3RyaW5nLCB7bGluZTogbiwgY2g6IDB9LCB7bGluZTogbiwgY2g6IGN1clNwYWNlU3Ry
aW5nLmxlbmd0aH0pOworICAgIGxpbmUuc3RhdGVBZnRlciA9IG51bGw7CisgIH0KKworICBmdW5j
dGlvbiBjaGFuZ2VMaW5lKGNtLCBoYW5kbGUsIG9wKSB7CisgICAgdmFyIG5vID0gaGFuZGxlLCBs
aW5lID0gaGFuZGxlLCBkb2MgPSBjbS52aWV3LmRvYzsKKyAgICBpZiAodHlwZW9mIGhhbmRsZSA9
PSAibnVtYmVyIikgbGluZSA9IGdldExpbmUoZG9jLCBjbGlwTGluZShkb2MsIGhhbmRsZSkpOwor
ICAgIGVsc2Ugbm8gPSBsaW5lTm8oaGFuZGxlKTsKKyAgICBpZiAobm8gPT0gbnVsbCkgcmV0dXJu
IG51bGw7CisgICAgaWYgKG9wKGxpbmUsIG5vKSkgcmVnQ2hhbmdlKGNtLCBubywgbm8gKyAxKTsK
KyAgICBlbHNlIHJldHVybiBudWxsOworICAgIHJldHVybiBsaW5lOworICB9CisKKyAgZnVuY3Rp
b24gZmluZFBvc0goY20sIGRpciwgdW5pdCwgdmlzdWFsbHkpIHsKKyAgICB2YXIgZG9jID0gY20u
dmlldy5kb2MsIGVuZCA9IHNlbEhlYWQoY20udmlldyksIGxpbmUgPSBlbmQubGluZSwgY2ggPSBl
bmQuY2g7CisgICAgdmFyIGxpbmVPYmogPSBnZXRMaW5lKGRvYywgbGluZSk7CisgICAgZnVuY3Rp
b24gZmluZE5leHRMaW5lKCkgeworICAgICAgdmFyIGwgPSBsaW5lICsgZGlyOworICAgICAgaWYg
KGwgPCAwIHx8IGwgPT0gZG9jLnNpemUpIHJldHVybiBmYWxzZTsKKyAgICAgIGxpbmUgPSBsOwor
ICAgICAgcmV0dXJuIGxpbmVPYmogPSBnZXRMaW5lKGRvYywgbCk7CisgICAgfQorICAgIGZ1bmN0
aW9uIG1vdmVPbmNlKGJvdW5kVG9MaW5lKSB7CisgICAgICB2YXIgbmV4dCA9ICh2aXN1YWxseSA/
IG1vdmVWaXN1YWxseSA6IG1vdmVMb2dpY2FsbHkpKGxpbmVPYmosIGNoLCBkaXIsIHRydWUpOwor
ICAgICAgaWYgKG5leHQgPT0gbnVsbCkgeworICAgICAgICBpZiAoIWJvdW5kVG9MaW5lICYmIGZp
bmROZXh0TGluZSgpKSB7CisgICAgICAgICAgaWYgKHZpc3VhbGx5KSBjaCA9IChkaXIgPCAwID8g
bGluZVJpZ2h0IDogbGluZUxlZnQpKGxpbmVPYmopOworICAgICAgICAgIGVsc2UgY2ggPSBkaXIg
PCAwID8gbGluZU9iai50ZXh0Lmxlbmd0aCA6IDA7CisgICAgICAgIH0gZWxzZSByZXR1cm4gZmFs
c2U7CisgICAgICB9IGVsc2UgY2ggPSBuZXh0OworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIGlmICh1bml0ID09ICJjaGFyIikgbW92ZU9uY2UoKTsKKyAgICBlbHNlIGlmICh1bml0ID09
ICJjb2x1bW4iKSBtb3ZlT25jZSh0cnVlKTsKKyAgICBlbHNlIGlmICh1bml0ID09ICJ3b3JkIikg
eworICAgICAgdmFyIHNhd1dvcmQgPSBmYWxzZTsKICAgICAgIGZvciAoOzspIHsKLSAgICAgICAg
aWYgKHRvIC0gZnJvbSA8PSAxKSByZXR1cm4gKHRvWCAtIHggPiB4IC0gZnJvbVgpID8gZnJvbSA6
IHRvOwotICAgICAgICB2YXIgbWlkZGxlID0gTWF0aC5jZWlsKChmcm9tICsgdG8pIC8gMiksIG1p
ZGRsZVggPSBnZXRYKG1pZGRsZSk7Ci0gICAgICAgIGlmIChtaWRkbGVYID4geCkge3RvID0gbWlk
ZGxlOyB0b1ggPSBtaWRkbGVYO30KLSAgICAgICAgZWxzZSB7ZnJvbSA9IG1pZGRsZTsgZnJvbVgg
PSBtaWRkbGVYO30KLSAgICAgIH0KLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBtZWFzdXJlTGluZShs
aW5lLCBjaCkgewotICAgICAgaWYgKGNoID09IDApIHJldHVybiB7dG9wOiAwLCBsZWZ0OiAwfTsK
LSAgICAgIHZhciB3YnIgPSBvcHRpb25zLmxpbmVXcmFwcGluZyAmJiBjaCA8IGxpbmUudGV4dC5s
ZW5ndGggJiYKLSAgICAgICAgICAgICAgICBzcGFuQWZmZWN0c1dyYXBwaW5nLnRlc3QobGluZS50
ZXh0LnNsaWNlKGNoIC0gMSwgY2ggKyAxKSk7Ci0gICAgICB2YXIgcHJlID0gbGluZS5nZXRFbGVt
ZW50KG1ha2VUYWIsIGNoLCB3YnIpOwotICAgICAgcmVtb3ZlQ2hpbGRyZW5BbmRBZGQobWVhc3Vy
ZSwgcHJlKTsKLSAgICAgIHZhciBhbmNob3IgPSBwcmUuYW5jaG9yOwotICAgICAgdmFyIHRvcCA9
IGFuY2hvci5vZmZzZXRUb3AsIGxlZnQgPSBhbmNob3Iub2Zmc2V0TGVmdDsKLSAgICAgIC8vIE9s
ZGVyIElFcyByZXBvcnQgemVybyBvZmZzZXRzIGZvciBzcGFucyBkaXJlY3RseSBhZnRlciBhIHdy
YXAKLSAgICAgIGlmIChpZSAmJiB0b3AgPT0gMCAmJiBsZWZ0ID09IDApIHsKLSAgICAgICAgdmFy
IGJhY2t1cCA9IGVsdCgic3BhbiIsICJ4Iik7Ci0gICAgICAgIGFuY2hvci5wYXJlbnROb2RlLmlu
c2VydEJlZm9yZShiYWNrdXAsIGFuY2hvci5uZXh0U2libGluZyk7Ci0gICAgICAgIHRvcCA9IGJh
Y2t1cC5vZmZzZXRUb3A7Ci0gICAgICB9Ci0gICAgICByZXR1cm4ge3RvcDogdG9wLCBsZWZ0OiBs
ZWZ0fTsKLSAgICB9Ci0gICAgZnVuY3Rpb24gbG9jYWxDb29yZHMocG9zLCBpbkxpbmVXcmFwKSB7
Ci0gICAgICB2YXIgeCwgbGggPSB0ZXh0SGVpZ2h0KCksIHkgPSBsaCAqIChoZWlnaHRBdExpbmUo
ZG9jLCBwb3MubGluZSkgLSAoaW5MaW5lV3JhcCA/IGRpc3BsYXlPZmZzZXQgOiAwKSk7Ci0gICAg
ICBpZiAocG9zLmNoID09IDApIHggPSAwOwotICAgICAgZWxzZSB7Ci0gICAgICAgIHZhciBzcCA9
IG1lYXN1cmVMaW5lKGdldExpbmUocG9zLmxpbmUpLCBwb3MuY2gpOwotICAgICAgICB4ID0gc3Au
bGVmdDsKLSAgICAgICAgaWYgKG9wdGlvbnMubGluZVdyYXBwaW5nKSB5ICs9IE1hdGgubWF4KDAs
IHNwLnRvcCk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4ge3g6IHgsIHk6IHksIHlCb3Q6IHkgKyBs
aH07Ci0gICAgfQotICAgIC8vIENvb3JkcyBtdXN0IGJlIGxpbmVTcGFjZS1sb2NhbAotICAgIGZ1
bmN0aW9uIGNvb3Jkc0NoYXIoeCwgeSkgewotICAgICAgaWYgKHkgPCAwKSByZXR1cm4ge2xpbmU6
IDAsIGNoOiAwfTsKLSAgICAgIHZhciB0aCA9IHRleHRIZWlnaHQoKSwgY3cgPSBjaGFyV2lkdGgo
KSwgaGVpZ2h0UG9zID0gZGlzcGxheU9mZnNldCArIE1hdGguZmxvb3IoeSAvIHRoKTsKLSAgICAg
IHZhciBsaW5lTm8gPSBsaW5lQXRIZWlnaHQoZG9jLCBoZWlnaHRQb3MpOwotICAgICAgaWYgKGxp
bmVObyA+PSBkb2Muc2l6ZSkgcmV0dXJuIHtsaW5lOiBkb2Muc2l6ZSAtIDEsIGNoOiBnZXRMaW5l
KGRvYy5zaXplIC0gMSkudGV4dC5sZW5ndGh9OwotICAgICAgdmFyIGxpbmVPYmogPSBnZXRMaW5l
KGxpbmVObyksIHRleHQgPSBsaW5lT2JqLnRleHQ7Ci0gICAgICB2YXIgdHcgPSBvcHRpb25zLmxp
bmVXcmFwcGluZywgaW5uZXJPZmYgPSB0dyA/IGhlaWdodFBvcyAtIGhlaWdodEF0TGluZShkb2Ms
IGxpbmVObykgOiAwOwotICAgICAgaWYgKHggPD0gMCAmJiBpbm5lck9mZiA9PSAwKSByZXR1cm4g
e2xpbmU6IGxpbmVObywgY2g6IDB9OwotICAgICAgdmFyIHdyb25nTGluZSA9IGZhbHNlOwotICAg
ICAgZnVuY3Rpb24gZ2V0WChsZW4pIHsKLSAgICAgICAgdmFyIHNwID0gbWVhc3VyZUxpbmUobGlu
ZU9iaiwgbGVuKTsKLSAgICAgICAgaWYgKHR3KSB7Ci0gICAgICAgICAgdmFyIG9mZiA9IE1hdGgu
cm91bmQoc3AudG9wIC8gdGgpOwotICAgICAgICAgIHdyb25nTGluZSA9IG9mZiAhPSBpbm5lck9m
ZjsKLSAgICAgICAgICByZXR1cm4gTWF0aC5tYXgoMCwgc3AubGVmdCArIChvZmYgLSBpbm5lck9m
ZikgKiBzY3JvbGxlci5jbGllbnRXaWR0aCk7CisgICAgICAgIGlmIChkaXIgPCAwKSBpZiAoIW1v
dmVPbmNlKCkpIGJyZWFrOworICAgICAgICBpZiAoaXNXb3JkQ2hhcihsaW5lT2JqLnRleHQuY2hh
ckF0KGNoKSkpIHNhd1dvcmQgPSB0cnVlOworICAgICAgICBlbHNlIGlmIChzYXdXb3JkKSB7aWYg
KGRpciA8IDApIHtkaXIgPSAxOyBtb3ZlT25jZSgpO30gYnJlYWs7fQorICAgICAgICBpZiAoZGly
ID4gMCkgaWYgKCFtb3ZlT25jZSgpKSBicmVhazsKKyAgICAgIH0KKyAgICB9CisgICAgcmV0dXJu
IHNraXBBdG9taWMoY20sIHtsaW5lOiBsaW5lLCBjaDogY2h9LCBkaXIsIHRydWUpOworICB9CisK
KyAgZnVuY3Rpb24gZmluZFdvcmRBdChsaW5lLCBwb3MpIHsKKyAgICB2YXIgc3RhcnQgPSBwb3Mu
Y2gsIGVuZCA9IHBvcy5jaDsKKyAgICBpZiAobGluZSkgeworICAgICAgaWYgKHBvcy5hZnRlciA9
PT0gZmFsc2UgfHwgZW5kID09IGxpbmUubGVuZ3RoKSAtLXN0YXJ0OyBlbHNlICsrZW5kOworICAg
ICAgdmFyIHN0YXJ0Q2hhciA9IGxpbmUuY2hhckF0KHN0YXJ0KTsKKyAgICAgIHZhciBjaGVjayA9
IGlzV29yZENoYXIoc3RhcnRDaGFyKSA/IGlzV29yZENoYXIgOgorICAgICAgICAvXHMvLnRlc3Qo
c3RhcnRDaGFyKSA/IGZ1bmN0aW9uKGNoKSB7cmV0dXJuIC9ccy8udGVzdChjaCk7fSA6CisgICAg
ICBmdW5jdGlvbihjaCkge3JldHVybiAhL1xzLy50ZXN0KGNoKSAmJiAhaXNXb3JkQ2hhcihjaCk7
fTsKKyAgICAgIHdoaWxlIChzdGFydCA+IDAgJiYgY2hlY2sobGluZS5jaGFyQXQoc3RhcnQgLSAx
KSkpIC0tc3RhcnQ7CisgICAgICB3aGlsZSAoZW5kIDwgbGluZS5sZW5ndGggJiYgY2hlY2sobGlu
ZS5jaGFyQXQoZW5kKSkpICsrZW5kOworICAgIH0KKyAgICByZXR1cm4ge2Zyb206IHtsaW5lOiBw
b3MubGluZSwgY2g6IHN0YXJ0fSwgdG86IHtsaW5lOiBwb3MubGluZSwgY2g6IGVuZH19OworICB9
CisKKyAgZnVuY3Rpb24gc2VsZWN0TGluZShjbSwgbGluZSkgeworICAgIHNldFNlbGVjdGlvblVz
ZXIoY20sIHtsaW5lOiBsaW5lLCBjaDogMH0sIGNsaXBQb3MoY20udmlldy5kb2MsIHtsaW5lOiBs
aW5lICsgMSwgY2g6IDB9KSk7CisgIH0KKworICAvLyBQUk9UT1RZUEUKKworICAvLyBUaGUgcHVi
bGljbHkgdmlzaWJsZSBBUEkuIE5vdGUgdGhhdCBvcGVyYXRpb24obnVsbCwgZikgbWVhbnMKKyAg
Ly8gJ3dyYXAgZiBpbiBhbiBvcGVyYXRpb24sIHBlcmZvcm1lZCBvbiBpdHMgYHRoaXNgIHBhcmFt
ZXRlcicKKworICBDb2RlTWlycm9yLnByb3RvdHlwZSA9IHsKKyAgICBnZXRWYWx1ZTogZnVuY3Rp
b24obGluZVNlcCkgeworICAgICAgdmFyIHRleHQgPSBbXSwgZG9jID0gdGhpcy52aWV3LmRvYzsK
KyAgICAgIGRvYy5pdGVyKDAsIGRvYy5zaXplLCBmdW5jdGlvbihsaW5lKSB7IHRleHQucHVzaChs
aW5lLnRleHQpOyB9KTsKKyAgICAgIHJldHVybiB0ZXh0LmpvaW4obGluZVNlcCB8fCAiXG4iKTsK
KyAgICB9LAorCisgICAgc2V0VmFsdWU6IG9wZXJhdGlvbihudWxsLCBmdW5jdGlvbihjb2RlKSB7
CisgICAgICB2YXIgZG9jID0gdGhpcy52aWV3LmRvYywgdG9wID0ge2xpbmU6IDAsIGNoOiAwfSwg
bGFzdExlbiA9IGdldExpbmUoZG9jLCBkb2Muc2l6ZS0xKS50ZXh0Lmxlbmd0aDsKKyAgICAgIHVw
ZGF0ZURvY0lubmVyKHRoaXMsIHRvcCwge2xpbmU6IGRvYy5zaXplIC0gMSwgY2g6IGxhc3RMZW59
LCBzcGxpdExpbmVzKGNvZGUpLCB0b3AsIHRvcCk7CisgICAgfSksCisKKyAgICBnZXRTZWxlY3Rp
b246IGZ1bmN0aW9uKGxpbmVTZXApIHsgcmV0dXJuIHRoaXMuZ2V0UmFuZ2UodGhpcy52aWV3LnNl
bC5mcm9tLCB0aGlzLnZpZXcuc2VsLnRvLCBsaW5lU2VwKTsgfSwKKworICAgIHJlcGxhY2VTZWxl
Y3Rpb246IG9wZXJhdGlvbihudWxsLCBmdW5jdGlvbihjb2RlLCBjb2xsYXBzZSkgeworICAgICAg
dmFyIHNlbCA9IHRoaXMudmlldy5zZWw7CisgICAgICB1cGRhdGVEb2ModGhpcywgc2VsLmZyb20s
IHNlbC50bywgc3BsaXRMaW5lcyhjb2RlKSwgY29sbGFwc2UgfHwgImFyb3VuZCIpOworICAgIH0p
LAorCisgICAgZm9jdXM6IGZ1bmN0aW9uKCl7d2luZG93LmZvY3VzKCk7IGZvY3VzSW5wdXQodGhp
cyk7IG9uRm9jdXModGhpcyk7IGZhc3RQb2xsKHRoaXMpO30sCisKKyAgICBzZXRPcHRpb246IGZ1
bmN0aW9uKG9wdGlvbiwgdmFsdWUpIHsKKyAgICAgIHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25z
LCBvbGQgPSBvcHRpb25zW29wdGlvbl07CisgICAgICBpZiAob3B0aW9uc1tvcHRpb25dID09IHZh
bHVlICYmIG9wdGlvbiAhPSAibW9kZSIpIHJldHVybjsKKyAgICAgIG9wdGlvbnNbb3B0aW9uXSA9
IHZhbHVlOworICAgICAgaWYgKG9wdGlvbkhhbmRsZXJzLmhhc093blByb3BlcnR5KG9wdGlvbikp
CisgICAgICAgIG9wZXJhdGlvbih0aGlzLCBvcHRpb25IYW5kbGVyc1tvcHRpb25dKSh0aGlzLCB2
YWx1ZSwgb2xkKTsKKyAgICB9LAorCisgICAgZ2V0T3B0aW9uOiBmdW5jdGlvbihvcHRpb24pIHty
ZXR1cm4gdGhpcy5vcHRpb25zW29wdGlvbl07fSwKKworICAgIGdldE1vZGU6IGZ1bmN0aW9uKCkg
e3JldHVybiB0aGlzLnZpZXcubW9kZTt9LAorCisgICAgdW5kbzogb3BlcmF0aW9uKG51bGwsIGZ1
bmN0aW9uKCkgeworICAgICAgdmFyIGhpc3QgPSB0aGlzLnZpZXcuaGlzdG9yeTsKKyAgICAgIHVu
cmVkb0hlbHBlcih0aGlzLCBoaXN0LmRvbmUsIGhpc3QudW5kb25lLCAtMSk7CisgICAgfSksCisg
ICAgcmVkbzogb3BlcmF0aW9uKG51bGwsIGZ1bmN0aW9uKCkgeworICAgICAgdmFyIGhpc3QgPSB0
aGlzLnZpZXcuaGlzdG9yeTsKKyAgICAgIHVucmVkb0hlbHBlcih0aGlzLCBoaXN0LnVuZG9uZSwg
aGlzdC5kb25lLCAxKTsKKyAgICB9KSwKKworICAgIGluZGVudExpbmU6IG9wZXJhdGlvbihudWxs
LCBmdW5jdGlvbihuLCBkaXIpIHsKKyAgICAgIGlmICh0eXBlb2YgZGlyICE9ICJzdHJpbmciKSB7
CisgICAgICAgIGlmIChkaXIgPT0gbnVsbCkgZGlyID0gdGhpcy5vcHRpb25zLnNtYXJ0SW5kZW50
ID8gInNtYXJ0IiA6ICJwcmV2IjsKKyAgICAgICAgZWxzZSBkaXIgPSBkaXIgPyAiYWRkIiA6ICJz
dWJ0cmFjdCI7CisgICAgICB9CisgICAgICBpZiAoaXNMaW5lKHRoaXMudmlldy5kb2MsIG4pKSBp
bmRlbnRMaW5lKHRoaXMsIG4sIGRpcik7CisgICAgfSksCisKKyAgICBpbmRlbnRTZWxlY3Rpb246
IG9wZXJhdGlvbihudWxsLCBmdW5jdGlvbihob3cpIHsKKyAgICAgIHZhciBzZWwgPSB0aGlzLnZp
ZXcuc2VsOworICAgICAgaWYgKHBvc0VxKHNlbC5mcm9tLCBzZWwudG8pKSByZXR1cm4gaW5kZW50
TGluZSh0aGlzLCBzZWwuZnJvbS5saW5lLCBob3cpOworICAgICAgdmFyIGUgPSBzZWwudG8ubGlu
ZSAtIChzZWwudG8uY2ggPyAwIDogMSk7CisgICAgICBmb3IgKHZhciBpID0gc2VsLmZyb20ubGlu
ZTsgaSA8PSBlOyArK2kpIGluZGVudExpbmUodGhpcywgaSwgaG93KTsKKyAgICB9KSwKKworICAg
IGhpc3RvcnlTaXplOiBmdW5jdGlvbigpIHsKKyAgICAgIHZhciBoaXN0ID0gdGhpcy52aWV3Lmhp
c3Rvcnk7CisgICAgICByZXR1cm4ge3VuZG86IGhpc3QuZG9uZS5sZW5ndGgsIHJlZG86IGhpc3Qu
dW5kb25lLmxlbmd0aH07CisgICAgfSwKKworICAgIGNsZWFySGlzdG9yeTogZnVuY3Rpb24oKSB7
dGhpcy52aWV3Lmhpc3RvcnkgPSBtYWtlSGlzdG9yeSgpO30sCisKKyAgICBtYXJrQ2xlYW46IGZ1
bmN0aW9uKCkgeworICAgICAgdGhpcy52aWV3Lmhpc3RvcnkuZGlydHlDb3VudGVyID0gMDsKKyAg
ICAgIHRoaXMudmlldy5oaXN0b3J5LmNsb3NlZCA9IHRydWU7CisgICAgfSwKKworICAgIGlzQ2xl
YW46IGZ1bmN0aW9uICgpIHtyZXR1cm4gdGhpcy52aWV3Lmhpc3RvcnkuZGlydHlDb3VudGVyID09
IDA7fSwKKyAgICAgIAorICAgIGdldEhpc3Rvcnk6IGZ1bmN0aW9uKCkgeworICAgICAgdmFyIGhp
c3QgPSB0aGlzLnZpZXcuaGlzdG9yeTsKKyAgICAgIGZ1bmN0aW9uIGNwKGFycikgeworICAgICAg
ICBmb3IgKHZhciBpID0gMCwgbncgPSBbXSwgbndlbHQ7IGkgPCBhcnIubGVuZ3RoOyArK2kpIHsK
KyAgICAgICAgICBudy5wdXNoKG53ZWx0ID0gW10pOworICAgICAgICAgIGZvciAodmFyIGogPSAw
LCBlbHQgPSBhcnJbaV07IGogPCBlbHQubGVuZ3RoOyArK2opIHsKKyAgICAgICAgICAgIHZhciBv
bGQgPSBbXSwgY3VyID0gZWx0W2pdOworICAgICAgICAgICAgbndlbHQucHVzaCh7c3RhcnQ6IGN1
ci5zdGFydCwgYWRkZWQ6IGN1ci5hZGRlZCwgb2xkOiBvbGR9KTsKKyAgICAgICAgICAgIGZvciAo
dmFyIGsgPSAwOyBrIDwgY3VyLm9sZC5sZW5ndGg7ICsraykgb2xkLnB1c2goaGxUZXh0KGN1ci5v
bGRba10pKTsKKyAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHNwLmxlZnQ7
CisgICAgICAgIHJldHVybiBudzsKICAgICAgIH0KLSAgICAgIHZhciBmcm9tID0gMCwgZnJvbVgg
PSAwLCB0byA9IHRleHQubGVuZ3RoLCB0b1g7Ci0gICAgICAvLyBHdWVzcyBhIHN1aXRhYmxlIHVw
cGVyIGJvdW5kIGZvciBvdXIgc2VhcmNoLgotICAgICAgdmFyIGVzdGltYXRlZCA9IE1hdGgubWlu
KHRvLCBNYXRoLmNlaWwoKHggKyBpbm5lck9mZiAqIHNjcm9sbGVyLmNsaWVudFdpZHRoICogLjkp
IC8gY3cpKTsKLSAgICAgIGZvciAoOzspIHsKLSAgICAgICAgdmFyIGVzdFggPSBnZXRYKGVzdGlt
YXRlZCk7Ci0gICAgICAgIGlmIChlc3RYIDw9IHggJiYgZXN0aW1hdGVkIDwgdG8pIGVzdGltYXRl
ZCA9IE1hdGgubWluKHRvLCBNYXRoLmNlaWwoZXN0aW1hdGVkICogMS4yKSk7Ci0gICAgICAgIGVs
c2Uge3RvWCA9IGVzdFg7IHRvID0gZXN0aW1hdGVkOyBicmVhazt9CisgICAgICByZXR1cm4ge2Rv
bmU6IGNwKGhpc3QuZG9uZSksIHVuZG9uZTogY3AoaGlzdC51bmRvbmUpfTsKKyAgICB9LAorCisg
ICAgc2V0SGlzdG9yeTogZnVuY3Rpb24oaGlzdERhdGEpIHsKKyAgICAgIHZhciBoaXN0ID0gdGhp
cy52aWV3Lmhpc3RvcnkgPSBtYWtlSGlzdG9yeSgpOworICAgICAgaGlzdC5kb25lID0gaGlzdERh
dGEuZG9uZTsKKyAgICAgIGhpc3QudW5kb25lID0gaGlzdERhdGEudW5kb25lOworICAgIH0sCisK
KyAgICBnZXRUb2tlbkF0OiBmdW5jdGlvbihwb3MpIHsKKyAgICAgIHZhciBkb2MgPSB0aGlzLnZp
ZXcuZG9jOworICAgICAgcG9zID0gY2xpcFBvcyhkb2MsIHBvcyk7CisgICAgICByZXR1cm4gZ2V0
VG9rZW5BdCh0aGlzLCBnZXRMaW5lKGRvYywgcG9zLmxpbmUpLCBnZXRTdGF0ZUJlZm9yZSh0aGlz
LCBwb3MubGluZSksIHBvcy5jaCk7CisgICAgfSwKKworICAgIGdldFN0YXRlQWZ0ZXI6IGZ1bmN0
aW9uKGxpbmUpIHsKKyAgICAgIHZhciBkb2MgPSB0aGlzLnZpZXcuZG9jOworICAgICAgbGluZSA9
IGNsaXBMaW5lKGRvYywgbGluZSA9PSBudWxsID8gZG9jLnNpemUgLSAxOiBsaW5lKTsKKyAgICAg
IHJldHVybiBnZXRTdGF0ZUJlZm9yZSh0aGlzLCBsaW5lICsgMSk7CisgICAgfSwKKworICAgIGN1
cnNvckNvb3JkczogZnVuY3Rpb24oc3RhcnQsIG1vZGUpIHsKKyAgICAgIHZhciBwb3MsIHNlbCA9
IHRoaXMudmlldy5zZWw7CisgICAgICBpZiAoc3RhcnQgPT0gbnVsbCkgc3RhcnQgPSBzZWwuaW52
ZXJ0ZWQ7CisgICAgICBpZiAodHlwZW9mIHN0YXJ0ID09ICJvYmplY3QiKSBwb3MgPSBjbGlwUG9z
KHRoaXMudmlldy5kb2MsIHN0YXJ0KTsKKyAgICAgIGVsc2UgcG9zID0gc3RhcnQgPyBzZWwuZnJv
bSA6IHNlbC50bzsKKyAgICAgIHJldHVybiBjdXJzb3JDb29yZHModGhpcywgcG9zLCBtb2RlIHx8
ICJwYWdlIik7CisgICAgfSwKKworICAgIGNoYXJDb29yZHM6IGZ1bmN0aW9uKHBvcywgbW9kZSkg
eworICAgICAgcmV0dXJuIGNoYXJDb29yZHModGhpcywgY2xpcFBvcyh0aGlzLnZpZXcuZG9jLCBw
b3MpLCBtb2RlIHx8ICJwYWdlIik7CisgICAgfSwKKworICAgIGNvb3Jkc0NoYXI6IGZ1bmN0aW9u
KGNvb3JkcykgeworICAgICAgdmFyIG9mZiA9IHRoaXMuZGlzcGxheS5saW5lU3BhY2UuZ2V0Qm91
bmRpbmdDbGllbnRSZWN0KCk7CisgICAgICByZXR1cm4gY29vcmRzQ2hhcih0aGlzLCBjb29yZHMu
bGVmdCAtIG9mZi5sZWZ0LCBjb29yZHMudG9wIC0gb2ZmLnRvcCk7CisgICAgfSwKKworICAgIGRl
ZmF1bHRUZXh0SGVpZ2h0OiBmdW5jdGlvbigpIHsgcmV0dXJuIHRleHRIZWlnaHQodGhpcy5kaXNw
bGF5KTsgfSwKKworICAgIG1hcmtUZXh0OiBvcGVyYXRpb24obnVsbCwgZnVuY3Rpb24oZnJvbSwg
dG8sIG9wdGlvbnMpIHsKKyAgICAgIHJldHVybiBtYXJrVGV4dCh0aGlzLCBjbGlwUG9zKHRoaXMu
dmlldy5kb2MsIGZyb20pLCBjbGlwUG9zKHRoaXMudmlldy5kb2MsIHRvKSwKKyAgICAgICAgICAg
ICAgICAgICAgICBvcHRpb25zLCAicmFuZ2UiKTsKKyAgICB9KSwKKworICAgIHNldEJvb2ttYXJr
OiBvcGVyYXRpb24obnVsbCwgZnVuY3Rpb24ocG9zLCB3aWRnZXQpIHsKKyAgICAgIHBvcyA9IGNs
aXBQb3ModGhpcy52aWV3LmRvYywgcG9zKTsKKyAgICAgIHJldHVybiBtYXJrVGV4dCh0aGlzLCBw
b3MsIHBvcywgd2lkZ2V0ID8ge3JlcGxhY2VkV2l0aDogd2lkZ2V0fSA6IHt9LCAiYm9va21hcmsi
KTsKKyAgICB9KSwKKworICAgIGZpbmRNYXJrc0F0OiBmdW5jdGlvbihwb3MpIHsKKyAgICAgIHZh
ciBkb2MgPSB0aGlzLnZpZXcuZG9jOworICAgICAgcG9zID0gY2xpcFBvcyhkb2MsIHBvcyk7Cisg
ICAgICB2YXIgbWFya2VycyA9IFtdLCBzcGFucyA9IGdldExpbmUoZG9jLCBwb3MubGluZSkubWFy
a2VkU3BhbnM7CisgICAgICBpZiAoc3BhbnMpIGZvciAodmFyIGkgPSAwOyBpIDwgc3BhbnMubGVu
Z3RoOyArK2kpIHsKKyAgICAgICAgdmFyIHNwYW4gPSBzcGFuc1tpXTsKKyAgICAgICAgaWYgKChz
cGFuLmZyb20gPT0gbnVsbCB8fCBzcGFuLmZyb20gPD0gcG9zLmNoKSAmJgorICAgICAgICAgICAg
KHNwYW4udG8gPT0gbnVsbCB8fCBzcGFuLnRvID49IHBvcy5jaCkpCisgICAgICAgICAgbWFya2Vy
cy5wdXNoKHNwYW4ubWFya2VyKTsKICAgICAgIH0KLSAgICAgIGlmICh4ID4gdG9YKSByZXR1cm4g
e2xpbmU6IGxpbmVObywgY2g6IHRvfTsKLSAgICAgIC8vIFRyeSB0byBndWVzcyBhIHN1aXRhYmxl
IGxvd2VyIGJvdW5kIGFzIHdlbGwuCi0gICAgICBlc3RpbWF0ZWQgPSBNYXRoLmZsb29yKHRvICog
MC44KTsgZXN0WCA9IGdldFgoZXN0aW1hdGVkKTsKLSAgICAgIGlmIChlc3RYIDwgeCkge2Zyb20g
PSBlc3RpbWF0ZWQ7IGZyb21YID0gZXN0WDt9Ci0gICAgICAvLyBEbyBhIGJpbmFyeSBzZWFyY2gg
YmV0d2VlbiB0aGVzZSBib3VuZHMuCi0gICAgICBmb3IgKDs7KSB7Ci0gICAgICAgIGlmICh0byAt
IGZyb20gPD0gMSkgewotICAgICAgICAgIHZhciBhZnRlciA9IHggLSBmcm9tWCA8IHRvWCAtIHg7
Ci0gICAgICAgICAgcmV0dXJuIHtsaW5lOiBsaW5lTm8sIGNoOiBhZnRlciA/IGZyb20gOiB0bywg
YWZ0ZXI6IGFmdGVyfTsKKyAgICAgIHJldHVybiBtYXJrZXJzOworICAgIH0sCisKKyAgICBzZXRH
dXR0ZXJNYXJrZXI6IG9wZXJhdGlvbihudWxsLCBmdW5jdGlvbihsaW5lLCBndXR0ZXJJRCwgdmFs
dWUpIHsKKyAgICAgIHJldHVybiBjaGFuZ2VMaW5lKHRoaXMsIGxpbmUsIGZ1bmN0aW9uKGxpbmUp
IHsKKyAgICAgICAgdmFyIG1hcmtlcnMgPSBsaW5lLmd1dHRlck1hcmtlcnMgfHwgKGxpbmUuZ3V0
dGVyTWFya2VycyA9IHt9KTsKKyAgICAgICAgbWFya2Vyc1tndXR0ZXJJRF0gPSB2YWx1ZTsKKyAg
ICAgICAgaWYgKCF2YWx1ZSAmJiBpc0VtcHR5KG1hcmtlcnMpKSBsaW5lLmd1dHRlck1hcmtlcnMg
PSBudWxsOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIH0pOworICAgIH0pLAorCisgICAg
Y2xlYXJHdXR0ZXI6IG9wZXJhdGlvbihudWxsLCBmdW5jdGlvbihndXR0ZXJJRCkgeworICAgICAg
dmFyIGkgPSAwLCBjbSA9IHRoaXMsIGRvYyA9IGNtLnZpZXcuZG9jOworICAgICAgZG9jLml0ZXIo
MCwgZG9jLnNpemUsIGZ1bmN0aW9uKGxpbmUpIHsKKyAgICAgICAgaWYgKGxpbmUuZ3V0dGVyTWFy
a2VycyAmJiBsaW5lLmd1dHRlck1hcmtlcnNbZ3V0dGVySURdKSB7CisgICAgICAgICAgbGluZS5n
dXR0ZXJNYXJrZXJzW2d1dHRlcklEXSA9IG51bGw7CisgICAgICAgICAgcmVnQ2hhbmdlKGNtLCBp
LCBpICsgMSk7CisgICAgICAgICAgaWYgKGlzRW1wdHkobGluZS5ndXR0ZXJNYXJrZXJzKSkgbGlu
ZS5ndXR0ZXJNYXJrZXJzID0gbnVsbDsKICAgICAgICAgfQotICAgICAgICB2YXIgbWlkZGxlID0g
TWF0aC5jZWlsKChmcm9tICsgdG8pIC8gMiksIG1pZGRsZVggPSBnZXRYKG1pZGRsZSk7Ci0gICAg
ICAgIGlmIChtaWRkbGVYID4geCkge3RvID0gbWlkZGxlOyB0b1ggPSBtaWRkbGVYOyBpZiAod3Jv
bmdMaW5lKSB0b1ggKz0gMTAwMDsgfQotICAgICAgICBlbHNlIHtmcm9tID0gbWlkZGxlOyBmcm9t
WCA9IG1pZGRsZVg7fQorICAgICAgICArK2k7CisgICAgICB9KTsKKyAgICB9KSwKKworICAgIGFk
ZExpbmVDbGFzczogb3BlcmF0aW9uKG51bGwsIGZ1bmN0aW9uKGhhbmRsZSwgd2hlcmUsIGNscykg
eworICAgICAgcmV0dXJuIGNoYW5nZUxpbmUodGhpcywgaGFuZGxlLCBmdW5jdGlvbihsaW5lKSB7
CisgICAgICAgIHZhciBwcm9wID0gd2hlcmUgPT0gInRleHQiID8gInRleHRDbGFzcyIgOiB3aGVy
ZSA9PSAiYmFja2dyb3VuZCIgPyAiYmdDbGFzcyIgOiAid3JhcENsYXNzIjsKKyAgICAgICAgaWYg
KCFsaW5lW3Byb3BdKSBsaW5lW3Byb3BdID0gY2xzOworICAgICAgICBlbHNlIGlmIChuZXcgUmVn
RXhwKCJcXGIiICsgY2xzICsgIlxcYiIpLnRlc3QobGluZVtwcm9wXSkpIHJldHVybiBmYWxzZTsK
KyAgICAgICAgZWxzZSBsaW5lW3Byb3BdICs9ICIgIiArIGNsczsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICB9KTsKKyAgICB9KSwKKworICAgIHJlbW92ZUxpbmVDbGFzczogb3BlcmF0aW9u
KG51bGwsIGZ1bmN0aW9uKGhhbmRsZSwgd2hlcmUsIGNscykgeworICAgICAgcmV0dXJuIGNoYW5n
ZUxpbmUodGhpcywgaGFuZGxlLCBmdW5jdGlvbihsaW5lKSB7CisgICAgICAgIHZhciBwcm9wID0g
d2hlcmUgPT0gInRleHQiID8gInRleHRDbGFzcyIgOiB3aGVyZSA9PSAiYmFja2dyb3VuZCIgPyAi
YmdDbGFzcyIgOiAid3JhcENsYXNzIjsKKyAgICAgICAgdmFyIGN1ciA9IGxpbmVbcHJvcF07Cisg
ICAgICAgIGlmICghY3VyKSByZXR1cm4gZmFsc2U7CisgICAgICAgIGVsc2UgaWYgKGNscyA9PSBu
dWxsKSBsaW5lW3Byb3BdID0gbnVsbDsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgdmFyIHVw
ZCA9IGN1ci5yZXBsYWNlKG5ldyBSZWdFeHAoIl4iICsgY2xzICsgIlxcYlxccyp8XFxzKlxcYiIg
KyBjbHMgKyAiXFxiIiksICIiKTsKKyAgICAgICAgICBpZiAodXBkID09IGN1cikgcmV0dXJuIGZh
bHNlOworICAgICAgICAgIGxpbmVbcHJvcF0gPSB1cGQgfHwgbnVsbDsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIH0pOworICAgIH0pLAorCisgICAgYWRkTGluZVdpZGdl
dDogb3BlcmF0aW9uKG51bGwsIGZ1bmN0aW9uIGFkZExpbmVXaWRnZXQoaGFuZGxlLCBub2RlLCBv
cHRpb25zKSB7CisgICAgICB2YXIgd2lkZ2V0ID0gb3B0aW9ucyB8fCB7fTsKKyAgICAgIHdpZGdl
dC5ub2RlID0gbm9kZTsKKyAgICAgIGlmICh3aWRnZXQubm9IU2Nyb2xsKSB0aGlzLmRpc3BsYXku
YWxpZ25XaWRnZXRzID0gdHJ1ZTsKKyAgICAgIGNoYW5nZUxpbmUodGhpcywgaGFuZGxlLCBmdW5j
dGlvbihsaW5lKSB7CisgICAgICAgIChsaW5lLndpZGdldHMgfHwgKGxpbmUud2lkZ2V0cyA9IFtd
KSkucHVzaCh3aWRnZXQpOworICAgICAgICB3aWRnZXQubGluZSA9IGxpbmU7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgfSk7CisgICAgICByZXR1cm4gd2lkZ2V0OworICAgIH0pLAorCisg
ICAgcmVtb3ZlTGluZVdpZGdldDogb3BlcmF0aW9uKG51bGwsIGZ1bmN0aW9uKHdpZGdldCkgewor
ICAgICAgdmFyIHdzID0gd2lkZ2V0LmxpbmUud2lkZ2V0cywgbm8gPSBsaW5lTm8od2lkZ2V0Lmxp
bmUpOworICAgICAgaWYgKG5vID09IG51bGwpIHJldHVybjsKKyAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgd3MubGVuZ3RoOyArK2kpIGlmICh3c1tpXSA9PSB3aWRnZXQpIHdzLnNwbGljZShpLS0s
IDEpOworICAgICAgcmVnQ2hhbmdlKHRoaXMsIG5vLCBubyArIDEpOworICAgIH0pLAorCisgICAg
bGluZUluZm86IGZ1bmN0aW9uKGxpbmUpIHsKKyAgICAgIGlmICh0eXBlb2YgbGluZSA9PSAibnVt
YmVyIikgeworICAgICAgICBpZiAoIWlzTGluZSh0aGlzLnZpZXcuZG9jLCBsaW5lKSkgcmV0dXJu
IG51bGw7CisgICAgICAgIHZhciBuID0gbGluZTsKKyAgICAgICAgbGluZSA9IGdldExpbmUodGhp
cy52aWV3LmRvYywgbGluZSk7CisgICAgICAgIGlmICghbGluZSkgcmV0dXJuIG51bGw7CisgICAg
ICB9IGVsc2UgeworICAgICAgICB2YXIgbiA9IGxpbmVObyhsaW5lKTsKKyAgICAgICAgaWYgKG4g
PT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICAgICB9Ci0gICAgfQotICAgIGZ1bmN0aW9uIHBhZ2VD
b29yZHMocG9zKSB7Ci0gICAgICB2YXIgbG9jYWwgPSBsb2NhbENvb3Jkcyhwb3MsIHRydWUpLCBv
ZmYgPSBlbHRPZmZzZXQobGluZVNwYWNlKTsKLSAgICAgIHJldHVybiB7eDogb2ZmLmxlZnQgKyBs
b2NhbC54LCB5OiBvZmYudG9wICsgbG9jYWwueSwgeUJvdDogb2ZmLnRvcCArIGxvY2FsLnlCb3R9
OwotICAgIH0KKyAgICAgIHJldHVybiB7bGluZTogbiwgaGFuZGxlOiBsaW5lLCB0ZXh0OiBsaW5l
LnRleHQsIGd1dHRlck1hcmtlcnM6IGxpbmUuZ3V0dGVyTWFya2VycywKKyAgICAgICAgICAgICAg
dGV4dENsYXNzOiBsaW5lLnRleHRDbGFzcywgYmdDbGFzczogbGluZS5iZ0NsYXNzLCB3cmFwQ2xh
c3M6IGxpbmUud3JhcENsYXNzLAorICAgICAgICAgICAgICB3aWRnZXRzOiBsaW5lLndpZGdldHN9
OworICAgIH0sCiAKLSAgICB2YXIgY2FjaGVkSGVpZ2h0LCBjYWNoZWRIZWlnaHRGb3IsIG1lYXN1
cmVQcmU7Ci0gICAgZnVuY3Rpb24gdGV4dEhlaWdodCgpIHsKLSAgICAgIGlmIChtZWFzdXJlUHJl
ID09IG51bGwpIHsKLSAgICAgICAgbWVhc3VyZVByZSA9IGVsdCgicHJlIik7Ci0gICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgNDk7ICsraSkgewotICAgICAgICAgIG1lYXN1cmVQcmUuYXBwZW5k
Q2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIngiKSk7Ci0gICAgICAgICAgbWVhc3VyZVBy
ZS5hcHBlbmRDaGlsZChlbHQoImJyIikpOwotICAgICAgICB9Ci0gICAgICAgIG1lYXN1cmVQcmUu
YXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIngiKSk7Ci0gICAgICB9Ci0gICAg
ICB2YXIgb2Zmc2V0SGVpZ2h0ID0gbGluZURpdi5jbGllbnRIZWlnaHQ7Ci0gICAgICBpZiAob2Zm
c2V0SGVpZ2h0ID09IGNhY2hlZEhlaWdodEZvcikgcmV0dXJuIGNhY2hlZEhlaWdodDsKLSAgICAg
IGNhY2hlZEhlaWdodEZvciA9IG9mZnNldEhlaWdodDsKLSAgICAgIHJlbW92ZUNoaWxkcmVuQW5k
QWRkKG1lYXN1cmUsIG1lYXN1cmVQcmUuY2xvbmVOb2RlKHRydWUpKTsKLSAgICAgIGNhY2hlZEhl
aWdodCA9IG1lYXN1cmUuZmlyc3RDaGlsZC5vZmZzZXRIZWlnaHQgLyA1MCB8fCAxOwotICAgICAg
cmVtb3ZlQ2hpbGRyZW4obWVhc3VyZSk7Ci0gICAgICByZXR1cm4gY2FjaGVkSGVpZ2h0OwotICAg
IH0KLSAgICB2YXIgY2FjaGVkV2lkdGgsIGNhY2hlZFdpZHRoRm9yID0gMDsKLSAgICBmdW5jdGlv
biBjaGFyV2lkdGgoKSB7Ci0gICAgICBpZiAoc2Nyb2xsZXIuY2xpZW50V2lkdGggPT0gY2FjaGVk
V2lkdGhGb3IpIHJldHVybiBjYWNoZWRXaWR0aDsKLSAgICAgIGNhY2hlZFdpZHRoRm9yID0gc2Ny
b2xsZXIuY2xpZW50V2lkdGg7Ci0gICAgICB2YXIgYW5jaG9yID0gZWx0KCJzcGFuIiwgIngiKTsK
LSAgICAgIHZhciBwcmUgPSBlbHQoInByZSIsIFthbmNob3JdKTsKLSAgICAgIHJlbW92ZUNoaWxk
cmVuQW5kQWRkKG1lYXN1cmUsIHByZSk7Ci0gICAgICByZXR1cm4gKGNhY2hlZFdpZHRoID0gYW5j
aG9yLm9mZnNldFdpZHRoIHx8IDEwKTsKLSAgICB9Ci0gICAgZnVuY3Rpb24gcGFkZGluZ1RvcCgp
IHtyZXR1cm4gbGluZVNwYWNlLm9mZnNldFRvcDt9Ci0gICAgZnVuY3Rpb24gcGFkZGluZ0xlZnQo
KSB7cmV0dXJuIGxpbmVTcGFjZS5vZmZzZXRMZWZ0O30KLQotICAgIGZ1bmN0aW9uIHBvc0Zyb21N
b3VzZShlLCBsaWJlcmFsKSB7Ci0gICAgICB2YXIgb2ZmVyA9IGVsdE9mZnNldChzY3JvbGxlciwg
dHJ1ZSksIHgsIHk7Ci0gICAgICAvLyBGYWlscyB1bnByZWRpY3RhYmx5IG9uIElFWzY3XSB3aGVu
IG1vdXNlIGlzIGRyYWdnZWQgYXJvdW5kIHF1aWNrbHkuCi0gICAgICB0cnkgeyB4ID0gZS5jbGll
bnRYOyB5ID0gZS5jbGllbnRZOyB9IGNhdGNoIChlKSB7IHJldHVybiBudWxsOyB9Ci0gICAgICAv
LyBUaGlzIGlzIGEgbWVzcyBvZiBhIGhldXJpc3RpYyB0byB0cnkgYW5kIGRldGVybWluZSB3aGV0
aGVyIGEKLSAgICAgIC8vIHNjcm9sbC1iYXIgd2FzIGNsaWNrZWQgb3Igbm90LCBhbmQgdG8gcmV0
dXJuIG51bGwgaWYgb25lIHdhcwotICAgICAgLy8gKGFuZCAhbGliZXJhbCkuCi0gICAgICBpZiAo
IWxpYmVyYWwgJiYgKHggLSBvZmZXLmxlZnQgPiBzY3JvbGxlci5jbGllbnRXaWR0aCB8fCB5IC0g
b2ZmVy50b3AgPiBzY3JvbGxlci5jbGllbnRIZWlnaHQpKQotICAgICAgICByZXR1cm4gbnVsbDsK
LSAgICAgIHZhciBvZmZMID0gZWx0T2Zmc2V0KGxpbmVTcGFjZSwgdHJ1ZSk7Ci0gICAgICByZXR1
cm4gY29vcmRzQ2hhcih4IC0gb2ZmTC5sZWZ0LCB5IC0gb2ZmTC50b3ApOwotICAgIH0KLSAgICBm
dW5jdGlvbiBvbkNvbnRleHRNZW51KGUpIHsKLSAgICAgIHZhciBwb3MgPSBwb3NGcm9tTW91c2Uo
ZSksIHNjcm9sbFBvcyA9IHNjcm9sbGJhci5zY3JvbGxUb3A7Ci0gICAgICBpZiAoIXBvcyB8fCBv
cGVyYSkgcmV0dXJuOyAvLyBPcGVyYSBpcyBkaWZmaWN1bHQuCi0gICAgICBpZiAocG9zRXEoc2Vs
LmZyb20sIHNlbC50bykgfHwgcG9zTGVzcyhwb3MsIHNlbC5mcm9tKSB8fCAhcG9zTGVzcyhwb3Ms
IHNlbC50bykpCi0gICAgICAgIG9wZXJhdGlvbihzZXRDdXJzb3IpKHBvcy5saW5lLCBwb3MuY2gp
OwotCi0gICAgICB2YXIgb2xkQ1NTID0gaW5wdXQuc3R5bGUuY3NzVGV4dDsKLSAgICAgIGlucHV0
RGl2LnN0eWxlLnBvc2l0aW9uID0gImFic29sdXRlIjsKLSAgICAgIGlucHV0LnN0eWxlLmNzc1Rl
eHQgPSAicG9zaXRpb246IGZpeGVkOyB3aWR0aDogMzBweDsgaGVpZ2h0OiAzMHB4OyB0b3A6ICIg
KyAoZS5jbGllbnRZIC0gNSkgKwotICAgICAgICAicHg7IGxlZnQ6ICIgKyAoZS5jbGllbnRYIC0g
NSkgKyAicHg7IHotaW5kZXg6IDEwMDA7IGJhY2tncm91bmQ6IHdoaXRlOyAiICsKLSAgICAgICAg
ImJvcmRlci13aWR0aDogMDsgb3V0bGluZTogbm9uZTsgb3ZlcmZsb3c6IGhpZGRlbjsgb3BhY2l0
eTogLjA1OyBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9NSk7IjsKLSAgICAgIGxlYXZlSW5wdXRBbG9u
ZSA9IHRydWU7Ci0gICAgICB2YXIgdmFsID0gaW5wdXQudmFsdWUgPSBnZXRTZWxlY3Rpb24oKTsK
LSAgICAgIGZvY3VzSW5wdXQoKTsKLSAgICAgIHNlbGVjdElucHV0KGlucHV0KTsKLSAgICAgIGZ1
bmN0aW9uIHJlaGlkZSgpIHsKLSAgICAgICAgdmFyIG5ld1ZhbCA9IHNwbGl0TGluZXMoaW5wdXQu
dmFsdWUpLmpvaW4oIlxuIik7Ci0gICAgICAgIGlmIChuZXdWYWwgIT0gdmFsICYmICFvcHRpb25z
LnJlYWRPbmx5KSBvcGVyYXRpb24ocmVwbGFjZVNlbGVjdGlvbikobmV3VmFsLCAiZW5kIik7Ci0g
ICAgICAgIGlucHV0RGl2LnN0eWxlLnBvc2l0aW9uID0gInJlbGF0aXZlIjsKLSAgICAgICAgaW5w
dXQuc3R5bGUuY3NzVGV4dCA9IG9sZENTUzsKLSAgICAgICAgaWYgKGllX2x0OSkgc2Nyb2xsYmFy
LnNjcm9sbFRvcCA9IHNjcm9sbFBvczsKLSAgICAgICAgbGVhdmVJbnB1dEFsb25lID0gZmFsc2U7
Ci0gICAgICAgIHJlc2V0SW5wdXQodHJ1ZSk7Ci0gICAgICAgIHNsb3dQb2xsKCk7Ci0gICAgICB9
Ci0KLSAgICAgIGlmIChnZWNrbykgewotICAgICAgICBlX3N0b3AoZSk7Ci0gICAgICAgIHZhciBt
b3VzZXVwID0gY29ubmVjdCh3aW5kb3csICJtb3VzZXVwIiwgZnVuY3Rpb24oKSB7Ci0gICAgICAg
ICAgbW91c2V1cCgpOwotICAgICAgICAgIHNldFRpbWVvdXQocmVoaWRlLCAyMCk7Ci0gICAgICAg
IH0sIHRydWUpOworICAgIGdldFZpZXdwb3J0OiBmdW5jdGlvbigpIHsgcmV0dXJuIHtmcm9tOiB0
aGlzLmRpc3BsYXkuc2hvd2luZ0Zyb20sIHRvOiB0aGlzLmRpc3BsYXkuc2hvd2luZ1RvfTt9LAor
CisgICAgYWRkV2lkZ2V0OiBmdW5jdGlvbihwb3MsIG5vZGUsIHNjcm9sbCwgdmVydCwgaG9yaXop
IHsKKyAgICAgIHZhciBkaXNwbGF5ID0gdGhpcy5kaXNwbGF5OworICAgICAgcG9zID0gY3Vyc29y
Q29vcmRzKHRoaXMsIGNsaXBQb3ModGhpcy52aWV3LmRvYywgcG9zKSk7CisgICAgICB2YXIgdG9w
ID0gcG9zLnRvcCwgbGVmdCA9IHBvcy5sZWZ0OworICAgICAgbm9kZS5zdHlsZS5wb3NpdGlvbiA9
ICJhYnNvbHV0ZSI7CisgICAgICBkaXNwbGF5LnNpemVyLmFwcGVuZENoaWxkKG5vZGUpOworICAg
ICAgaWYgKHZlcnQgPT0gIm92ZXIiKSB0b3AgPSBwb3MudG9wOworICAgICAgZWxzZSBpZiAodmVy
dCA9PSAibmVhciIpIHsKKyAgICAgICAgdmFyIHZzcGFjZSA9IE1hdGgubWF4KGRpc3BsYXkud3Jh
cHBlci5jbGllbnRIZWlnaHQsIHRoaXMudmlldy5kb2MuaGVpZ2h0KSwKKyAgICAgICAgaHNwYWNl
ID0gTWF0aC5tYXgoZGlzcGxheS5zaXplci5jbGllbnRXaWR0aCwgZGlzcGxheS5saW5lU3BhY2Uu
Y2xpZW50V2lkdGgpOworICAgICAgICBpZiAocG9zLmJvdHRvbSArIG5vZGUub2Zmc2V0SGVpZ2h0
ID4gdnNwYWNlICYmIHBvcy50b3AgPiBub2RlLm9mZnNldEhlaWdodCkKKyAgICAgICAgICB0b3Ag
PSBwb3MudG9wIC0gbm9kZS5vZmZzZXRIZWlnaHQ7CisgICAgICAgIGlmIChsZWZ0ICsgbm9kZS5v
ZmZzZXRXaWR0aCA+IGhzcGFjZSkKKyAgICAgICAgICBsZWZ0ID0gaHNwYWNlIC0gbm9kZS5vZmZz
ZXRXaWR0aDsKKyAgICAgIH0KKyAgICAgIG5vZGUuc3R5bGUudG9wID0gKHRvcCArIHBhZGRpbmdU
b3AoZGlzcGxheSkpICsgInB4IjsKKyAgICAgIG5vZGUuc3R5bGUubGVmdCA9IG5vZGUuc3R5bGUu
cmlnaHQgPSAiIjsKKyAgICAgIGlmIChob3JpeiA9PSAicmlnaHQiKSB7CisgICAgICAgIGxlZnQg
PSBkaXNwbGF5LnNpemVyLmNsaWVudFdpZHRoIC0gbm9kZS5vZmZzZXRXaWR0aDsKKyAgICAgICAg
bm9kZS5zdHlsZS5yaWdodCA9ICIwcHgiOwogICAgICAgfSBlbHNlIHsKLSAgICAgICAgc2V0VGlt
ZW91dChyZWhpZGUsIDUwKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBDdXJzb3ItYmxpbmtp
bmcKLSAgICBmdW5jdGlvbiByZXN0YXJ0QmxpbmsoKSB7Ci0gICAgICBjbGVhckludGVydmFsKGJs
aW5rZXIpOwotICAgICAgdmFyIG9uID0gdHJ1ZTsKLSAgICAgIGN1cnNvci5zdHlsZS52aXNpYmls
aXR5ID0gIiI7Ci0gICAgICBibGlua2VyID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7Ci0gICAg
ICAgIGN1cnNvci5zdHlsZS52aXNpYmlsaXR5ID0gKG9uID0gIW9uKSA/ICIiIDogImhpZGRlbiI7
Ci0gICAgICB9LCA2NTApOwotICAgIH0KLQotICAgIHZhciBtYXRjaGluZyA9IHsiKCI6ICIpPiIs
ICIpIjogIig8IiwgIlsiOiAiXT4iLCAiXSI6ICJbPCIsICJ7IjogIn0+IiwgIn0iOiAiezwifTsK
LSAgICBmdW5jdGlvbiBtYXRjaEJyYWNrZXRzKGF1dG9jbGVhcikgewotICAgICAgdmFyIGhlYWQg
PSBzZWwuaW52ZXJ0ZWQgPyBzZWwuZnJvbSA6IHNlbC50bywgbGluZSA9IGdldExpbmUoaGVhZC5s
aW5lKSwgcG9zID0gaGVhZC5jaCAtIDE7Ci0gICAgICB2YXIgbWF0Y2ggPSAocG9zID49IDAgJiYg
bWF0Y2hpbmdbbGluZS50ZXh0LmNoYXJBdChwb3MpXSkgfHwgbWF0Y2hpbmdbbGluZS50ZXh0LmNo
YXJBdCgrK3BvcyldOwotICAgICAgaWYgKCFtYXRjaCkgcmV0dXJuOwotICAgICAgdmFyIGNoID0g
bWF0Y2guY2hhckF0KDApLCBmb3J3YXJkID0gbWF0Y2guY2hhckF0KDEpID09ICI+IiwgZCA9IGZv
cndhcmQgPyAxIDogLTEsIHN0ID0gbGluZS5zdHlsZXM7Ci0gICAgICBmb3IgKHZhciBvZmYgPSBw
b3MgKyAxLCBpID0gMCwgZSA9IHN0Lmxlbmd0aDsgaSA8IGU7IGkrPTIpCi0gICAgICAgIGlmICgo
b2ZmIC09IHN0W2ldLmxlbmd0aCkgPD0gMCkge3ZhciBzdHlsZSA9IHN0W2krMV07IGJyZWFrO30K
LQotICAgICAgdmFyIHN0YWNrID0gW2xpbmUudGV4dC5jaGFyQXQocG9zKV0sIHJlID0gL1soKXt9
W1xdXS87Ci0gICAgICBmdW5jdGlvbiBzY2FuKGxpbmUsIGZyb20sIHRvKSB7Ci0gICAgICAgIGlm
ICghbGluZS50ZXh0KSByZXR1cm47Ci0gICAgICAgIHZhciBzdCA9IGxpbmUuc3R5bGVzLCBwb3Mg
PSBmb3J3YXJkID8gMCA6IGxpbmUudGV4dC5sZW5ndGggLSAxLCBjdXI7Ci0gICAgICAgIGZvciAo
dmFyIGkgPSBmb3J3YXJkID8gMCA6IHN0Lmxlbmd0aCAtIDIsIGUgPSBmb3J3YXJkID8gc3QubGVu
Z3RoIDogLTI7IGkgIT0gZTsgaSArPSAyKmQpIHsKLSAgICAgICAgICB2YXIgdGV4dCA9IHN0W2ld
OwotICAgICAgICAgIGlmIChzdFtpKzFdICE9IHN0eWxlKSB7cG9zICs9IGQgKiB0ZXh0Lmxlbmd0
aDsgY29udGludWU7fQotICAgICAgICAgIGZvciAodmFyIGogPSBmb3J3YXJkID8gMCA6IHRleHQu
bGVuZ3RoIC0gMSwgdGUgPSBmb3J3YXJkID8gdGV4dC5sZW5ndGggOiAtMTsgaiAhPSB0ZTsgaiAr
PSBkLCBwb3MrPWQpIHsKLSAgICAgICAgICAgIGlmIChwb3MgPj0gZnJvbSAmJiBwb3MgPCB0byAm
JiByZS50ZXN0KGN1ciA9IHRleHQuY2hhckF0KGopKSkgewotICAgICAgICAgICAgICB2YXIgbWF0
Y2ggPSBtYXRjaGluZ1tjdXJdOwotICAgICAgICAgICAgICBpZiAobWF0Y2guY2hhckF0KDEpID09
ICI+IiA9PSBmb3J3YXJkKSBzdGFjay5wdXNoKGN1cik7Ci0gICAgICAgICAgICAgIGVsc2UgaWYg
KHN0YWNrLnBvcCgpICE9IG1hdGNoLmNoYXJBdCgwKSkgcmV0dXJuIHtwb3M6IHBvcywgbWF0Y2g6
IGZhbHNlfTsKLSAgICAgICAgICAgICAgZWxzZSBpZiAoIXN0YWNrLmxlbmd0aCkgcmV0dXJuIHtw
b3M6IHBvcywgbWF0Y2g6IHRydWV9OwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAg
ICAgfQorICAgICAgICBpZiAoaG9yaXogPT0gImxlZnQiKSBsZWZ0ID0gMDsKKyAgICAgICAgZWxz
ZSBpZiAoaG9yaXogPT0gIm1pZGRsZSIpIGxlZnQgPSAoZGlzcGxheS5zaXplci5jbGllbnRXaWR0
aCAtIG5vZGUub2Zmc2V0V2lkdGgpIC8gMjsKKyAgICAgICAgbm9kZS5zdHlsZS5sZWZ0ID0gbGVm
dCArICJweCI7CiAgICAgICB9Ci0gICAgICBmb3IgKHZhciBpID0gaGVhZC5saW5lLCBlID0gZm9y
d2FyZCA/IE1hdGgubWluKGkgKyAxMDAsIGRvYy5zaXplKSA6IE1hdGgubWF4KC0xLCBpIC0gMTAw
KTsgaSAhPSBlOyBpKz1kKSB7Ci0gICAgICAgIHZhciBsaW5lID0gZ2V0TGluZShpKSwgZmlyc3Qg
PSBpID09IGhlYWQubGluZTsKLSAgICAgICAgdmFyIGZvdW5kID0gc2NhbihsaW5lLCBmaXJzdCAm
JiBmb3J3YXJkID8gcG9zICsgMSA6IDAsIGZpcnN0ICYmICFmb3J3YXJkID8gcG9zIDogbGluZS50
ZXh0Lmxlbmd0aCk7Ci0gICAgICAgIGlmIChmb3VuZCkgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBp
ZiAoIWZvdW5kKSBmb3VuZCA9IHtwb3M6IG51bGwsIG1hdGNoOiBmYWxzZX07Ci0gICAgICB2YXIg
c3R5bGUgPSBmb3VuZC5tYXRjaCA/ICJDb2RlTWlycm9yLW1hdGNoaW5nYnJhY2tldCIgOiAiQ29k
ZU1pcnJvci1ub25tYXRjaGluZ2JyYWNrZXQiOwotICAgICAgdmFyIG9uZSA9IG1hcmtUZXh0KHts
aW5lOiBoZWFkLmxpbmUsIGNoOiBwb3N9LCB7bGluZTogaGVhZC5saW5lLCBjaDogcG9zKzF9LCBz
dHlsZSksCi0gICAgICAgICAgdHdvID0gZm91bmQucG9zICE9IG51bGwgJiYgbWFya1RleHQoe2xp
bmU6IGksIGNoOiBmb3VuZC5wb3N9LCB7bGluZTogaSwgY2g6IGZvdW5kLnBvcyArIDF9LCBzdHls
ZSk7Ci0gICAgICB2YXIgY2xlYXIgPSBvcGVyYXRpb24oZnVuY3Rpb24oKXtvbmUuY2xlYXIoKTsg
dHdvICYmIHR3by5jbGVhcigpO30pOwotICAgICAgaWYgKGF1dG9jbGVhcikgc2V0VGltZW91dChj
bGVhciwgODAwKTsKLSAgICAgIGVsc2UgYnJhY2tldEhpZ2hsaWdodGVkID0gY2xlYXI7Ci0gICAg
fQotCi0gICAgLy8gRmluZHMgdGhlIGxpbmUgdG8gc3RhcnQgd2l0aCB3aGVuIHN0YXJ0aW5nIGEg
cGFyc2UuIFRyaWVzIHRvCi0gICAgLy8gZmluZCBhIGxpbmUgd2l0aCBhIHN0YXRlQWZ0ZXIsIHNv
IHRoYXQgaXQgY2FuIHN0YXJ0IHdpdGggYQotICAgIC8vIHZhbGlkIHN0YXRlLiBJZiB0aGF0IGZh
aWxzLCBpdCByZXR1cm5zIHRoZSBsaW5lIHdpdGggdGhlCi0gICAgLy8gc21hbGxlc3QgaW5kZW50
YXRpb24sIHdoaWNoIHRlbmRzIHRvIG5lZWQgdGhlIGxlYXN0IGNvbnRleHQgdG8KLSAgICAvLyBw
YXJzZSBjb3JyZWN0bHkuCi0gICAgZnVuY3Rpb24gZmluZFN0YXJ0TGluZShuKSB7Ci0gICAgICB2
YXIgbWluaW5kZW50LCBtaW5saW5lOwotICAgICAgZm9yICh2YXIgc2VhcmNoID0gbiwgbGltID0g
biAtIDQwOyBzZWFyY2ggPiBsaW07IC0tc2VhcmNoKSB7Ci0gICAgICAgIGlmIChzZWFyY2ggPT0g
MCkgcmV0dXJuIDA7Ci0gICAgICAgIHZhciBsaW5lID0gZ2V0TGluZShzZWFyY2gtMSk7Ci0gICAg
ICAgIGlmIChsaW5lLnN0YXRlQWZ0ZXIpIHJldHVybiBzZWFyY2g7Ci0gICAgICAgIHZhciBpbmRl
bnRlZCA9IGxpbmUuaW5kZW50YXRpb24ob3B0aW9ucy50YWJTaXplKTsKLSAgICAgICAgaWYgKG1p
bmxpbmUgPT0gbnVsbCB8fCBtaW5pbmRlbnQgPiBpbmRlbnRlZCkgewotICAgICAgICAgIG1pbmxp
bmUgPSBzZWFyY2ggLSAxOwotICAgICAgICAgIG1pbmluZGVudCA9IGluZGVudGVkOwotICAgICAg
ICB9CisgICAgICBpZiAoc2Nyb2xsKQorICAgICAgICBzY3JvbGxJbnRvVmlldyhkaXNwbGF5LCBs
ZWZ0LCB0b3AsIGxlZnQgKyBub2RlLm9mZnNldFdpZHRoLCB0b3AgKyBub2RlLm9mZnNldEhlaWdo
dCk7CisgICAgfSwKKworICAgIGxpbmVDb3VudDogZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXMudmll
dy5kb2Muc2l6ZTt9LAorCisgICAgY2xpcFBvczogZnVuY3Rpb24ocG9zKSB7cmV0dXJuIGNsaXBQ
b3ModGhpcy52aWV3LmRvYywgcG9zKTt9LAorCisgICAgZ2V0Q3Vyc29yOiBmdW5jdGlvbihzdGFy
dCkgeworICAgICAgdmFyIHNlbCA9IHRoaXMudmlldy5zZWw7CisgICAgICBpZiAoc3RhcnQgPT0g
bnVsbCkgc3RhcnQgPSBzZWwuaW52ZXJ0ZWQ7CisgICAgICByZXR1cm4gY29weVBvcyhzdGFydCA/
IHNlbC5mcm9tIDogc2VsLnRvKTsKKyAgICB9LAorCisgICAgc29tZXRoaW5nU2VsZWN0ZWQ6IGZ1
bmN0aW9uKCkge3JldHVybiAhcG9zRXEodGhpcy52aWV3LnNlbC5mcm9tLCB0aGlzLnZpZXcuc2Vs
LnRvKTt9LAorCisgICAgc2V0Q3Vyc29yOiBvcGVyYXRpb24obnVsbCwgZnVuY3Rpb24obGluZSwg
Y2gsIHVzZXIpIHsKKyAgICAgIHZhciBwb3MgPSB0eXBlb2YgbGluZSA9PSAibnVtYmVyIiA/IHts
aW5lOiBsaW5lLCBjaDogY2ggfHwgMH0gOiBsaW5lOworICAgICAgKHVzZXIgPyBzZXRTZWxlY3Rp
b25Vc2VyIDogc2V0U2VsZWN0aW9uKSh0aGlzLCBwb3MsIHBvcyk7CisgICAgfSksCisKKyAgICBz
ZXRTZWxlY3Rpb246IG9wZXJhdGlvbihudWxsLCBmdW5jdGlvbihmcm9tLCB0bywgdXNlcikgewor
ICAgICAgdmFyIGRvYyA9IHRoaXMudmlldy5kb2M7CisgICAgICAodXNlciA/IHNldFNlbGVjdGlv
blVzZXIgOiBzZXRTZWxlY3Rpb24pKHRoaXMsIGNsaXBQb3MoZG9jLCBmcm9tKSwgY2xpcFBvcyhk
b2MsIHRvIHx8IGZyb20pKTsKKyAgICB9KSwKKworICAgIGdldExpbmU6IGZ1bmN0aW9uKGxpbmUp
IHt2YXIgbCA9IHRoaXMuZ2V0TGluZUhhbmRsZShsaW5lKTsgcmV0dXJuIGwgJiYgbC50ZXh0O30s
CisKKyAgICBnZXRMaW5lSGFuZGxlOiBmdW5jdGlvbihsaW5lKSB7CisgICAgICB2YXIgZG9jID0g
dGhpcy52aWV3LmRvYzsKKyAgICAgIGlmIChpc0xpbmUoZG9jLCBsaW5lKSkgcmV0dXJuIGdldExp
bmUoZG9jLCBsaW5lKTsKKyAgICB9LAorCisgICAgZ2V0TGluZU51bWJlcjogZnVuY3Rpb24obGlu
ZSkge3JldHVybiBsaW5lTm8obGluZSk7fSwKKworICAgIHNldExpbmU6IG9wZXJhdGlvbihudWxs
LCBmdW5jdGlvbihsaW5lLCB0ZXh0KSB7CisgICAgICBpZiAoaXNMaW5lKHRoaXMudmlldy5kb2Ms
IGxpbmUpKQorICAgICAgICByZXBsYWNlUmFuZ2UodGhpcywgdGV4dCwge2xpbmU6IGxpbmUsIGNo
OiAwfSwge2xpbmU6IGxpbmUsIGNoOiBnZXRMaW5lKHRoaXMudmlldy5kb2MsIGxpbmUpLnRleHQu
bGVuZ3RofSk7CisgICAgfSksCisKKyAgICByZW1vdmVMaW5lOiBvcGVyYXRpb24obnVsbCwgZnVu
Y3Rpb24obGluZSkgeworICAgICAgaWYgKGlzTGluZSh0aGlzLnZpZXcuZG9jLCBsaW5lKSkKKyAg
ICAgICAgcmVwbGFjZVJhbmdlKHRoaXMsICIiLCB7bGluZTogbGluZSwgY2g6IDB9LCBjbGlwUG9z
KHRoaXMudmlldy5kb2MsIHtsaW5lOiBsaW5lKzEsIGNoOiAwfSkpOworICAgIH0pLAorCisgICAg
cmVwbGFjZVJhbmdlOiBvcGVyYXRpb24obnVsbCwgZnVuY3Rpb24oY29kZSwgZnJvbSwgdG8pIHsK
KyAgICAgIHZhciBkb2MgPSB0aGlzLnZpZXcuZG9jOworICAgICAgZnJvbSA9IGNsaXBQb3MoZG9j
LCBmcm9tKTsKKyAgICAgIHRvID0gdG8gPyBjbGlwUG9zKGRvYywgdG8pIDogZnJvbTsKKyAgICAg
IHJldHVybiByZXBsYWNlUmFuZ2UodGhpcywgY29kZSwgZnJvbSwgdG8pOworICAgIH0pLAorCisg
ICAgZ2V0UmFuZ2U6IGZ1bmN0aW9uKGZyb20sIHRvLCBsaW5lU2VwKSB7CisgICAgICB2YXIgZG9j
ID0gdGhpcy52aWV3LmRvYzsKKyAgICAgIGZyb20gPSBjbGlwUG9zKGRvYywgZnJvbSk7IHRvID0g
Y2xpcFBvcyhkb2MsIHRvKTsKKyAgICAgIHZhciBsMSA9IGZyb20ubGluZSwgbDIgPSB0by5saW5l
OworICAgICAgaWYgKGwxID09IGwyKSByZXR1cm4gZ2V0TGluZShkb2MsIGwxKS50ZXh0LnNsaWNl
KGZyb20uY2gsIHRvLmNoKTsKKyAgICAgIHZhciBjb2RlID0gW2dldExpbmUoZG9jLCBsMSkudGV4
dC5zbGljZShmcm9tLmNoKV07CisgICAgICBkb2MuaXRlcihsMSArIDEsIGwyLCBmdW5jdGlvbihs
aW5lKSB7IGNvZGUucHVzaChsaW5lLnRleHQpOyB9KTsKKyAgICAgIGNvZGUucHVzaChnZXRMaW5l
KGRvYywgbDIpLnRleHQuc2xpY2UoMCwgdG8uY2gpKTsKKyAgICAgIHJldHVybiBjb2RlLmpvaW4o
bGluZVNlcCB8fCAiXG4iKTsKKyAgICB9LAorCisgICAgdHJpZ2dlck9uS2V5RG93bjogb3BlcmF0
aW9uKG51bGwsIG9uS2V5RG93biksCisKKyAgICBleGVjQ29tbWFuZDogZnVuY3Rpb24oY21kKSB7
cmV0dXJuIGNvbW1hbmRzW2NtZF0odGhpcyk7fSwKKworICAgIC8vIFN0dWZmIHVzZWQgYnkgY29t
bWFuZHMsIHByb2JhYmx5IG5vdCBtdWNoIHVzZSB0byBvdXRzaWRlIGNvZGUuCisgICAgbW92ZUg6
IG9wZXJhdGlvbihudWxsLCBmdW5jdGlvbihkaXIsIHVuaXQpIHsKKyAgICAgIHZhciBzZWwgPSB0
aGlzLnZpZXcuc2VsLCBwb3MgPSBkaXIgPCAwID8gc2VsLmZyb20gOiBzZWwudG87CisgICAgICBp
ZiAoc2VsLnNoaWZ0IHx8IHBvc0VxKHNlbC5mcm9tLCBzZWwudG8pKSBwb3MgPSBmaW5kUG9zSCh0
aGlzLCBkaXIsIHVuaXQsIHRydWUpOworICAgICAgc2V0U2VsZWN0aW9uVXNlcih0aGlzLCBwb3Ms
IHBvcywgZGlyKTsKKyAgICB9KSwKKworICAgIGRlbGV0ZUg6IG9wZXJhdGlvbihudWxsLCBmdW5j
dGlvbihkaXIsIHVuaXQpIHsKKyAgICAgIHZhciBzZWwgPSB0aGlzLnZpZXcuc2VsOworICAgICAg
aWYgKCFwb3NFcShzZWwuZnJvbSwgc2VsLnRvKSkgcmVwbGFjZVJhbmdlKHRoaXMsICIiLCBzZWwu
ZnJvbSwgc2VsLnRvKTsKKyAgICAgIGVsc2UgcmVwbGFjZVJhbmdlKHRoaXMsICIiLCBzZWwuZnJv
bSwgZmluZFBvc0godGhpcywgZGlyLCB1bml0LCBmYWxzZSkpOworICAgICAgdGhpcy5jdXJPcC51
c2VyU2VsQ2hhbmdlID0gdHJ1ZTsKKyAgICB9KSwKKworICAgIG1vdmVWOiBvcGVyYXRpb24obnVs
bCwgZnVuY3Rpb24oZGlyLCB1bml0KSB7CisgICAgICB2YXIgdmlldyA9IHRoaXMudmlldywgZG9j
ID0gdmlldy5kb2MsIGRpc3BsYXkgPSB0aGlzLmRpc3BsYXk7CisgICAgICB2YXIgZGlzdCA9IDAs
IGN1ciA9IHNlbEhlYWQodmlldyksIHBvcyA9IGN1cnNvckNvb3Jkcyh0aGlzLCBjdXIsICJkaXYi
KTsKKyAgICAgIHZhciB4ID0gcG9zLmxlZnQsIHk7CisgICAgICBpZiAodmlldy5nb2FsQ29sdW1u
ICE9IG51bGwpIHggPSB2aWV3LmdvYWxDb2x1bW47CisgICAgICBpZiAodW5pdCA9PSAicGFnZSIp
IHsKKyAgICAgICAgdmFyIHBhZ2VTaXplID0gTWF0aC5taW4oZGlzcGxheS53cmFwcGVyLmNsaWVu
dEhlaWdodCwgd2luZG93LmlubmVySGVpZ2h0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5j
bGllbnRIZWlnaHQpOworICAgICAgICB5ID0gcG9zLnRvcCArIGRpciAqIHBhZ2VTaXplOworICAg
ICAgfSBlbHNlIGlmICh1bml0ID09ICJsaW5lIikgeworICAgICAgICB5ID0gZGlyID4gMCA/IHBv
cy5ib3R0b20gKyAzIDogcG9zLnRvcCAtIDM7CiAgICAgICB9Ci0gICAgICByZXR1cm4gbWlubGlu
ZTsKLSAgICB9Ci0gICAgZnVuY3Rpb24gZ2V0U3RhdGVCZWZvcmUobikgewotICAgICAgdmFyIHN0
YXJ0ID0gZmluZFN0YXJ0TGluZShuKSwgc3RhdGUgPSBzdGFydCAmJiBnZXRMaW5lKHN0YXJ0LTEp
LnN0YXRlQWZ0ZXI7Ci0gICAgICBpZiAoIXN0YXRlKSBzdGF0ZSA9IHN0YXJ0U3RhdGUobW9kZSk7
Ci0gICAgICBlbHNlIHN0YXRlID0gY29weVN0YXRlKG1vZGUsIHN0YXRlKTsKLSAgICAgIGRvYy5p
dGVyKHN0YXJ0LCBuLCBmdW5jdGlvbihsaW5lKSB7Ci0gICAgICAgIGxpbmUuaGlnaGxpZ2h0KG1v
ZGUsIHN0YXRlLCBvcHRpb25zLnRhYlNpemUpOwotICAgICAgICBsaW5lLnN0YXRlQWZ0ZXIgPSBj
b3B5U3RhdGUobW9kZSwgc3RhdGUpOworICAgICAgZG8geworICAgICAgICB2YXIgdGFyZ2V0ID0g
Y29vcmRzQ2hhcih0aGlzLCB4LCB5KTsKKyAgICAgICAgeSArPSBkaXIgKiA1OworICAgICAgfSB3
aGlsZSAodGFyZ2V0Lm91dHNpZGUgJiYgKGRpciA8IDAgPyB5ID4gMCA6IHkgPCBkb2MuaGVpZ2h0
KSk7CisKKyAgICAgIGlmICh1bml0ID09ICJwYWdlIikgZGlzcGxheS5zY3JvbGxiYXJWLnNjcm9s
bFRvcCArPSBjaGFyQ29vcmRzKHRoaXMsIHRhcmdldCwgImRpdiIpLnRvcCAtIHBvcy50b3A7Cisg
ICAgICBzZXRTZWxlY3Rpb25Vc2VyKHRoaXMsIHRhcmdldCwgdGFyZ2V0LCBkaXIpOworICAgICAg
dmlldy5nb2FsQ29sdW1uID0geDsKKyAgICB9KSwKKworICAgIHRvZ2dsZU92ZXJ3cml0ZTogZnVu
Y3Rpb24oKSB7CisgICAgICBpZiAodGhpcy52aWV3Lm92ZXJ3cml0ZSA9ICF0aGlzLnZpZXcub3Zl
cndyaXRlKQorICAgICAgICB0aGlzLmRpc3BsYXkuY3Vyc29yLmNsYXNzTmFtZSArPSAiIENvZGVN
aXJyb3Itb3ZlcndyaXRlIjsKKyAgICAgIGVsc2UKKyAgICAgICAgdGhpcy5kaXNwbGF5LmN1cnNv
ci5jbGFzc05hbWUgPSB0aGlzLmRpc3BsYXkuY3Vyc29yLmNsYXNzTmFtZS5yZXBsYWNlKCIgQ29k
ZU1pcnJvci1vdmVyd3JpdGUiLCAiIik7CisgICAgfSwKKworICAgIHBvc0Zyb21JbmRleDogZnVu
Y3Rpb24ob2ZmKSB7CisgICAgICB2YXIgbGluZU5vID0gMCwgY2gsIGRvYyA9IHRoaXMudmlldy5k
b2M7CisgICAgICBkb2MuaXRlcigwLCBkb2Muc2l6ZSwgZnVuY3Rpb24obGluZSkgeworICAgICAg
ICB2YXIgc3ogPSBsaW5lLnRleHQubGVuZ3RoICsgMTsKKyAgICAgICAgaWYgKHN6ID4gb2ZmKSB7
IGNoID0gb2ZmOyByZXR1cm4gdHJ1ZTsgfQorICAgICAgICBvZmYgLT0gc3o7CisgICAgICAgICsr
bGluZU5vOwogICAgICAgfSk7Ci0gICAgICBpZiAoc3RhcnQgPCBuKSBjaGFuZ2VzLnB1c2goe2Zy
b206IHN0YXJ0LCB0bzogbn0pOwotICAgICAgaWYgKG4gPCBkb2Muc2l6ZSAmJiAhZ2V0TGluZShu
KS5zdGF0ZUFmdGVyKSB3b3JrLnB1c2gobik7Ci0gICAgICByZXR1cm4gc3RhdGU7Ci0gICAgfQot
ICAgIGZ1bmN0aW9uIGhpZ2hsaWdodExpbmVzKHN0YXJ0LCBlbmQpIHsKLSAgICAgIHZhciBzdGF0
ZSA9IGdldFN0YXRlQmVmb3JlKHN0YXJ0KTsKLSAgICAgIGRvYy5pdGVyKHN0YXJ0LCBlbmQsIGZ1
bmN0aW9uKGxpbmUpIHsKLSAgICAgICAgbGluZS5oaWdobGlnaHQobW9kZSwgc3RhdGUsIG9wdGlv
bnMudGFiU2l6ZSk7Ci0gICAgICAgIGxpbmUuc3RhdGVBZnRlciA9IGNvcHlTdGF0ZShtb2RlLCBz
dGF0ZSk7CisgICAgICByZXR1cm4gY2xpcFBvcyhkb2MsIHtsaW5lOiBsaW5lTm8sIGNoOiBjaH0p
OworICAgIH0sCisgICAgaW5kZXhGcm9tUG9zOiBmdW5jdGlvbiAoY29vcmRzKSB7CisgICAgICBp
ZiAoY29vcmRzLmxpbmUgPCAwIHx8IGNvb3Jkcy5jaCA8IDApIHJldHVybiAwOworICAgICAgdmFy
IGluZGV4ID0gY29vcmRzLmNoOworICAgICAgdGhpcy52aWV3LmRvYy5pdGVyKDAsIGNvb3Jkcy5s
aW5lLCBmdW5jdGlvbiAobGluZSkgeworICAgICAgICBpbmRleCArPSBsaW5lLnRleHQubGVuZ3Ro
ICsgMTsKICAgICAgIH0pOwotICAgIH0KLSAgICBmdW5jdGlvbiBoaWdobGlnaHRXb3JrZXIoKSB7
Ci0gICAgICB2YXIgZW5kID0gK25ldyBEYXRlICsgb3B0aW9ucy53b3JrVGltZTsKLSAgICAgIHZh
ciBmb3VuZFdvcmsgPSB3b3JrLmxlbmd0aDsKLSAgICAgIHdoaWxlICh3b3JrLmxlbmd0aCkgewot
ICAgICAgICBpZiAoIWdldExpbmUoc2hvd2luZ0Zyb20pLnN0YXRlQWZ0ZXIpIHZhciB0YXNrID0g
c2hvd2luZ0Zyb207Ci0gICAgICAgIGVsc2UgdmFyIHRhc2sgPSB3b3JrLnBvcCgpOwotICAgICAg
ICBpZiAodGFzayA+PSBkb2Muc2l6ZSkgY29udGludWU7Ci0gICAgICAgIHZhciBzdGFydCA9IGZp
bmRTdGFydExpbmUodGFzayksIHN0YXRlID0gc3RhcnQgJiYgZ2V0TGluZShzdGFydC0xKS5zdGF0
ZUFmdGVyOwotICAgICAgICBpZiAoc3RhdGUpIHN0YXRlID0gY29weVN0YXRlKG1vZGUsIHN0YXRl
KTsKLSAgICAgICAgZWxzZSBzdGF0ZSA9IHN0YXJ0U3RhdGUobW9kZSk7Ci0KLSAgICAgICAgdmFy
IHVuY2hhbmdlZCA9IDAsIGNvbXBhcmUgPSBtb2RlLmNvbXBhcmVTdGF0ZXMsIHJlYWxDaGFuZ2Ug
PSBmYWxzZSwKLSAgICAgICAgICAgIGkgPSBzdGFydCwgYmFpbCA9IGZhbHNlOwotICAgICAgICBk
b2MuaXRlcihpLCBkb2Muc2l6ZSwgZnVuY3Rpb24obGluZSkgewotICAgICAgICAgIHZhciBoYWRT
dGF0ZSA9IGxpbmUuc3RhdGVBZnRlcjsKLSAgICAgICAgICBpZiAoK25ldyBEYXRlID4gZW5kKSB7
Ci0gICAgICAgICAgICB3b3JrLnB1c2goaSk7Ci0gICAgICAgICAgICBzdGFydFdvcmtlcihvcHRp
b25zLndvcmtEZWxheSk7Ci0gICAgICAgICAgICBpZiAocmVhbENoYW5nZSkgY2hhbmdlcy5wdXNo
KHtmcm9tOiB0YXNrLCB0bzogaSArIDF9KTsKLSAgICAgICAgICAgIHJldHVybiAoYmFpbCA9IHRy
dWUpOwotICAgICAgICAgIH0KLSAgICAgICAgICB2YXIgY2hhbmdlZCA9IGxpbmUuaGlnaGxpZ2h0
KG1vZGUsIHN0YXRlLCBvcHRpb25zLnRhYlNpemUpOwotICAgICAgICAgIGlmIChjaGFuZ2VkKSBy
ZWFsQ2hhbmdlID0gdHJ1ZTsKLSAgICAgICAgICBsaW5lLnN0YXRlQWZ0ZXIgPSBjb3B5U3RhdGUo
bW9kZSwgc3RhdGUpOwotICAgICAgICAgIHZhciBkb25lID0gbnVsbDsKLSAgICAgICAgICBpZiAo
Y29tcGFyZSkgewotICAgICAgICAgICAgdmFyIHNhbWUgPSBoYWRTdGF0ZSAmJiBjb21wYXJlKGhh
ZFN0YXRlLCBzdGF0ZSk7Ci0gICAgICAgICAgICBpZiAoc2FtZSAhPSBQYXNzKSBkb25lID0gISFz
YW1lOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoZG9uZSA9PSBudWxsKSB7Ci0gICAgICAg
ICAgICBpZiAoY2hhbmdlZCAhPT0gZmFsc2UgfHwgIWhhZFN0YXRlKSB1bmNoYW5nZWQgPSAwOwot
ICAgICAgICAgICAgZWxzZSBpZiAoKyt1bmNoYW5nZWQgPiAzICYmICghbW9kZS5pbmRlbnQgfHwg
bW9kZS5pbmRlbnQoaGFkU3RhdGUsICIiKSA9PSBtb2RlLmluZGVudChzdGF0ZSwgIiIpKSkKLSAg
ICAgICAgICAgICAgZG9uZSA9IHRydWU7Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChkb25l
KSByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICArK2k7Ci0gICAgICAgIH0pOwotICAgICAgICBpZiAo
YmFpbCkgcmV0dXJuOwotICAgICAgICBpZiAocmVhbENoYW5nZSkgY2hhbmdlcy5wdXNoKHtmcm9t
OiB0YXNrLCB0bzogaSArIDF9KTsKLSAgICAgIH0KLSAgICAgIGlmIChmb3VuZFdvcmsgJiYgb3B0
aW9ucy5vbkhpZ2hsaWdodENvbXBsZXRlKQotICAgICAgICBvcHRpb25zLm9uSGlnaGxpZ2h0Q29t
cGxldGUoaW5zdGFuY2UpOwotICAgIH0KLSAgICBmdW5jdGlvbiBzdGFydFdvcmtlcih0aW1lKSB7
Ci0gICAgICBpZiAoIXdvcmsubGVuZ3RoKSByZXR1cm47Ci0gICAgICBoaWdobGlnaHQuc2V0KHRp
bWUsIG9wZXJhdGlvbihoaWdobGlnaHRXb3JrZXIpKTsKLSAgICB9Ci0KLSAgICAvLyBPcGVyYXRp
b25zIGFyZSB1c2VkIHRvIHdyYXAgY2hhbmdlcyBpbiBzdWNoIGEgd2F5IHRoYXQgZWFjaAotICAg
IC8vIGNoYW5nZSB3b24ndCBoYXZlIHRvIHVwZGF0ZSB0aGUgY3Vyc29yIGFuZCBkaXNwbGF5ICh3
aGljaCB3b3VsZAotICAgIC8vIGJlIGF3a3dhcmQsIHNsb3csIGFuZCBlcnJvci1wcm9uZSksIGJ1
dCBpbnN0ZWFkIHVwZGF0ZXMgYXJlCi0gICAgLy8gYmF0Y2hlZCBhbmQgdGhlbiBhbGwgY29tYmlu
ZWQgYW5kIGV4ZWN1dGVkIGF0IG9uY2UuCi0gICAgZnVuY3Rpb24gc3RhcnRPcGVyYXRpb24oKSB7
Ci0gICAgICB1cGRhdGVJbnB1dCA9IHVzZXJTZWxDaGFuZ2UgPSB0ZXh0Q2hhbmdlZCA9IG51bGw7
Ci0gICAgICBjaGFuZ2VzID0gW107IHNlbGVjdGlvbkNoYW5nZWQgPSBmYWxzZTsgY2FsbGJhY2tz
ID0gW107Ci0gICAgfQotICAgIGZ1bmN0aW9uIGVuZE9wZXJhdGlvbigpIHsKLSAgICAgIGlmICh1
cGRhdGVNYXhMaW5lKSBjb21wdXRlTWF4TGVuZ3RoKCk7Ci0gICAgICBpZiAobWF4TGluZUNoYW5n
ZWQgJiYgIW9wdGlvbnMubGluZVdyYXBwaW5nKSB7Ci0gICAgICAgIHZhciBjdXJzb3JXaWR0aCA9
IHdpZHRoRm9yY2VyLm9mZnNldFdpZHRoLCBsZWZ0ID0gbWVhc3VyZUxpbmUobWF4TGluZSwgbWF4
TGluZS50ZXh0Lmxlbmd0aCkubGVmdDsKLSAgICAgICAgd2lkdGhGb3JjZXIuc3R5bGUubGVmdCA9
IGxlZnQgKyAicHgiOwotICAgICAgICBsaW5lU3BhY2Uuc3R5bGUubWluV2lkdGggPSAobGVmdCAr
IGN1cnNvcldpZHRoKSArICJweCI7Ci0gICAgICAgIG1heExpbmVDaGFuZ2VkID0gZmFsc2U7Ci0g
ICAgICB9Ci0gICAgICB2YXIgbmV3U2Nyb2xsUG9zLCB1cGRhdGVkOwotICAgICAgaWYgKHNlbGVj
dGlvbkNoYW5nZWQpIHsKLSAgICAgICAgdmFyIGNvb3JkcyA9IGNhbGN1bGF0ZUN1cnNvckNvb3Jk
cygpOwotICAgICAgICBuZXdTY3JvbGxQb3MgPSBjYWxjdWxhdGVTY3JvbGxQb3MoY29vcmRzLngs
IGNvb3Jkcy55LCBjb29yZHMueCwgY29vcmRzLnlCb3QpOwotICAgICAgfQotICAgICAgaWYgKGNo
YW5nZXMubGVuZ3RoIHx8IG5ld1Njcm9sbFBvcyAmJiBuZXdTY3JvbGxQb3Muc2Nyb2xsVG9wICE9
IG51bGwpCi0gICAgICAgIHVwZGF0ZWQgPSB1cGRhdGVEaXNwbGF5KGNoYW5nZXMsIHRydWUsIG5l
d1Njcm9sbFBvcyAmJiBuZXdTY3JvbGxQb3Muc2Nyb2xsVG9wKTsKLSAgICAgIGlmICghdXBkYXRl
ZCkgewotICAgICAgICBpZiAoc2VsZWN0aW9uQ2hhbmdlZCkgdXBkYXRlU2VsZWN0aW9uKCk7Ci0g
ICAgICAgIGlmIChndXR0ZXJEaXJ0eSkgdXBkYXRlR3V0dGVyKCk7Ci0gICAgICB9Ci0gICAgICBp
ZiAobmV3U2Nyb2xsUG9zKSBzY3JvbGxDdXJzb3JJbnRvVmlldygpOwotICAgICAgaWYgKHNlbGVj
dGlvbkNoYW5nZWQpIHtzY3JvbGxFZGl0b3JJbnRvVmlldygpOyByZXN0YXJ0QmxpbmsoKTt9Ci0K
LSAgICAgIGlmIChmb2N1c2VkICYmICFsZWF2ZUlucHV0QWxvbmUgJiYKLSAgICAgICAgICAodXBk
YXRlSW5wdXQgPT09IHRydWUgfHwgKHVwZGF0ZUlucHV0ICE9PSBmYWxzZSAmJiBzZWxlY3Rpb25D
aGFuZ2VkKSkpCi0gICAgICAgIHJlc2V0SW5wdXQodXNlclNlbENoYW5nZSk7Ci0KLSAgICAgIGlm
IChzZWxlY3Rpb25DaGFuZ2VkICYmIG9wdGlvbnMubWF0Y2hCcmFja2V0cykKLSAgICAgICAgc2V0
VGltZW91dChvcGVyYXRpb24oZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgaWYgKGJyYWNrZXRIaWdo
bGlnaHRlZCkge2JyYWNrZXRIaWdobGlnaHRlZCgpOyBicmFja2V0SGlnaGxpZ2h0ZWQgPSBudWxs
O30KLSAgICAgICAgICBpZiAocG9zRXEoc2VsLmZyb20sIHNlbC50bykpIG1hdGNoQnJhY2tldHMo
ZmFsc2UpOwotICAgICAgICB9KSwgMjApOwotICAgICAgdmFyIHNjID0gc2VsZWN0aW9uQ2hhbmdl
ZCwgY2JzID0gY2FsbGJhY2tzOyAvLyB0aGVzZSBjYW4gYmUgcmVzZXQgYnkgY2FsbGJhY2tzCi0g
ICAgICBpZiAodGV4dENoYW5nZWQgJiYgb3B0aW9ucy5vbkNoYW5nZSAmJiBpbnN0YW5jZSkKLSAg
ICAgICAgb3B0aW9ucy5vbkNoYW5nZShpbnN0YW5jZSwgdGV4dENoYW5nZWQpOwotICAgICAgaWYg
KHNjICYmIG9wdGlvbnMub25DdXJzb3JBY3Rpdml0eSkKLSAgICAgICAgb3B0aW9ucy5vbkN1cnNv
ckFjdGl2aXR5KGluc3RhbmNlKTsKLSAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2JzLmxlbmd0
aDsgKytpKSBjYnNbaV0oaW5zdGFuY2UpOwotICAgICAgaWYgKHVwZGF0ZWQgJiYgb3B0aW9ucy5v
blVwZGF0ZSkgb3B0aW9ucy5vblVwZGF0ZShpbnN0YW5jZSk7Ci0gICAgfQotICAgIHZhciBuZXN0
ZWRPcGVyYXRpb24gPSAwOwotICAgIGZ1bmN0aW9uIG9wZXJhdGlvbihmKSB7Ci0gICAgICByZXR1
cm4gZnVuY3Rpb24oKSB7Ci0gICAgICAgIGlmICghbmVzdGVkT3BlcmF0aW9uKyspIHN0YXJ0T3Bl
cmF0aW9uKCk7Ci0gICAgICAgIHRyeSB7dmFyIHJlc3VsdCA9IGYuYXBwbHkodGhpcywgYXJndW1l
bnRzKTt9Ci0gICAgICAgIGZpbmFsbHkge2lmICghLS1uZXN0ZWRPcGVyYXRpb24pIGVuZE9wZXJh
dGlvbigpO30KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgIH07Ci0gICAgfQorICAgICAg
cmV0dXJuIGluZGV4OworICAgIH0sCiAKLSAgICBmdW5jdGlvbiBjb21wb3VuZENoYW5nZShmKSB7
Ci0gICAgICBoaXN0b3J5LnN0YXJ0Q29tcG91bmQoKTsKLSAgICAgIHRyeSB7IHJldHVybiBmKCk7
IH0gZmluYWxseSB7IGhpc3RvcnkuZW5kQ29tcG91bmQoKTsgfQotICAgIH0KKyAgICBzY3JvbGxU
bzogZnVuY3Rpb24oeCwgeSkgeworICAgICAgaWYgKHggIT0gbnVsbCkgdGhpcy5kaXNwbGF5LnNj
cm9sbGJhckguc2Nyb2xsTGVmdCA9IHRoaXMuZGlzcGxheS5zY3JvbGxlci5zY3JvbGxMZWZ0ID0g
eDsKKyAgICAgIGlmICh5ICE9IG51bGwpIHRoaXMuZGlzcGxheS5zY3JvbGxiYXJWLnNjcm9sbFRv
cCA9IHRoaXMuZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3AgPSB5OworICAgICAgdXBkYXRlRGlz
cGxheSh0aGlzLCBbXSk7CisgICAgfSwKKyAgICBnZXRTY3JvbGxJbmZvOiBmdW5jdGlvbigpIHsK
KyAgICAgIHZhciBzY3JvbGxlciA9IHRoaXMuZGlzcGxheS5zY3JvbGxlciwgY28gPSBzY3JvbGxl
ckN1dE9mZjsKKyAgICAgIHJldHVybiB7bGVmdDogc2Nyb2xsZXIuc2Nyb2xsTGVmdCwgdG9wOiBz
Y3JvbGxlci5zY3JvbGxUb3AsCisgICAgICAgICAgICAgIGhlaWdodDogc2Nyb2xsZXIuc2Nyb2xs
SGVpZ2h0IC0gY28sIHdpZHRoOiBzY3JvbGxlci5zY3JvbGxXaWR0aCAtIGNvLAorICAgICAgICAg
ICAgICBjbGllbnRIZWlnaHQ6IHNjcm9sbGVyLmNsaWVudEhlaWdodCAtIGNvLCBjbGllbnRXaWR0
aDogc2Nyb2xsZXIuY2xpZW50V2lkdGggLSBjb307CisgICAgfSwKIAotICAgIGZvciAodmFyIGV4
dCBpbiBleHRlbnNpb25zKQotICAgICAgaWYgKGV4dGVuc2lvbnMucHJvcGVydHlJc0VudW1lcmFi
bGUoZXh0KSAmJgotICAgICAgICAgICFpbnN0YW5jZS5wcm9wZXJ0eUlzRW51bWVyYWJsZShleHQp
KQotICAgICAgICBpbnN0YW5jZVtleHRdID0gZXh0ZW5zaW9uc1tleHRdOwotICAgIHJldHVybiBp
bnN0YW5jZTsKLSAgfSAvLyAoZW5kIG9mIGZ1bmN0aW9uIENvZGVNaXJyb3IpCisgICAgc2Nyb2xs
SW50b1ZpZXc6IGZ1bmN0aW9uKHBvcykgeworICAgICAgcG9zID0gcG9zID8gY2xpcFBvcyh0aGlz
LnZpZXcuZG9jLCBwb3MpIDogc2VsSGVhZCh0aGlzLnZpZXcpOworICAgICAgdmFyIGNvb3JkcyA9
IGN1cnNvckNvb3Jkcyh0aGlzLCBwb3MpOworICAgICAgc2Nyb2xsSW50b1ZpZXcodGhpcy5kaXNw
bGF5LCBjb29yZHMubGVmdCwgY29vcmRzLnRvcCwgY29vcmRzLmxlZnQsIGNvb3Jkcy5ib3R0b20p
OworICAgIH0sCiAKLSAgLy8gVGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBvcHRpb25zLgotICBD
b2RlTWlycm9yLmRlZmF1bHRzID0gewotICAgIHZhbHVlOiAiIiwKLSAgICBtb2RlOiBudWxsLAot
ICAgIHRoZW1lOiAiZGVmYXVsdCIsCi0gICAgaW5kZW50VW5pdDogMiwKLSAgICBpbmRlbnRXaXRo
VGFiczogZmFsc2UsCi0gICAgc21hcnRJbmRlbnQ6IHRydWUsCi0gICAgdGFiU2l6ZTogNCwKLSAg
ICBrZXlNYXA6ICJkZWZhdWx0IiwKLSAgICBleHRyYUtleXM6IG51bGwsCi0gICAgZWxlY3RyaWND
aGFyczogdHJ1ZSwKLSAgICBhdXRvQ2xlYXJFbXB0eUxpbmVzOiBmYWxzZSwKLSAgICBvbktleUV2
ZW50OiBudWxsLAotICAgIG9uRHJhZ0V2ZW50OiBudWxsLAotICAgIGxpbmVXcmFwcGluZzogZmFs
c2UsCi0gICAgbGluZU51bWJlcnM6IGZhbHNlLAotICAgIGd1dHRlcjogZmFsc2UsCi0gICAgZml4
ZWRHdXR0ZXI6IGZhbHNlLAotICAgIGZpcnN0TGluZU51bWJlcjogMSwKLSAgICByZWFkT25seTog
ZmFsc2UsCi0gICAgZHJhZ0Ryb3A6IHRydWUsCi0gICAgb25DaGFuZ2U6IG51bGwsCi0gICAgb25D
dXJzb3JBY3Rpdml0eTogbnVsbCwKLSAgICBvbkd1dHRlckNsaWNrOiBudWxsLAotICAgIG9uSGln
aGxpZ2h0Q29tcGxldGU6IG51bGwsCi0gICAgb25VcGRhdGU6IG51bGwsCi0gICAgb25Gb2N1czog
bnVsbCwgb25CbHVyOiBudWxsLCBvblNjcm9sbDogbnVsbCwKLSAgICBtYXRjaEJyYWNrZXRzOiBm
YWxzZSwKLSAgICB3b3JrVGltZTogMTAwLAotICAgIHdvcmtEZWxheTogMjAwLAotICAgIHBvbGxJ
bnRlcnZhbDogMTAwLAotICAgIHVuZG9EZXB0aDogNDAsCi0gICAgdGFiaW5kZXg6IG51bGwsCi0g
ICAgYXV0b2ZvY3VzOiBudWxsLAotICAgIGxpbmVOdW1iZXJGb3JtYXR0ZXI6IGZ1bmN0aW9uKGlu
dGVnZXIpIHsgcmV0dXJuIGludGVnZXI7IH0KKyAgICBzZXRTaXplOiBmdW5jdGlvbih3aWR0aCwg
aGVpZ2h0KSB7CisgICAgICBmdW5jdGlvbiBpbnRlcnByZXQodmFsKSB7CisgICAgICAgIHJldHVy
biB0eXBlb2YgdmFsID09ICJudW1iZXIiIHx8IC9eXGQrJC8udGVzdChTdHJpbmcodmFsKSkgPyB2
YWwgKyAicHgiIDogdmFsOworICAgICAgfQorICAgICAgaWYgKHdpZHRoICE9IG51bGwpIHRoaXMu
ZGlzcGxheS53cmFwcGVyLnN0eWxlLndpZHRoID0gaW50ZXJwcmV0KHdpZHRoKTsKKyAgICAgIGlm
IChoZWlnaHQgIT0gbnVsbCkgdGhpcy5kaXNwbGF5LndyYXBwZXIuc3R5bGUuaGVpZ2h0ID0gaW50
ZXJwcmV0KGhlaWdodCk7CisgICAgICB0aGlzLnJlZnJlc2goKTsKKyAgICB9LAorCisgICAgb246
IGZ1bmN0aW9uKHR5cGUsIGYpIHtvbih0aGlzLCB0eXBlLCBmKTt9LAorICAgIG9mZjogZnVuY3Rp
b24odHlwZSwgZikge29mZih0aGlzLCB0eXBlLCBmKTt9LAorCisgICAgb3BlcmF0aW9uOiBmdW5j
dGlvbihmKXtyZXR1cm4gb3BlcmF0aW9uKHRoaXMsIGYpKCk7fSwKKyAgICBjb21wb3VuZENoYW5n
ZTogZnVuY3Rpb24oZil7cmV0dXJuIGNvbXBvdW5kQ2hhbmdlKHRoaXMsIGYpO30sCisKKyAgICBy
ZWZyZXNoOiBmdW5jdGlvbigpeworICAgICAgdXBkYXRlRGlzcGxheSh0aGlzLCB0cnVlLCB0aGlz
LnZpZXcuc2Nyb2xsVG9wKTsKKyAgICAgIGlmICh0aGlzLmRpc3BsYXkuc2Nyb2xsYmFyVi5zY3Jv
bGxIZWlnaHQgPiB0aGlzLnZpZXcuc2Nyb2xsVG9wKQorICAgICAgICB0aGlzLmRpc3BsYXkuc2Ny
b2xsYmFyVi5zY3JvbGxUb3AgPSB0aGlzLnZpZXcuc2Nyb2xsVG9wOworICAgIH0sCisKKyAgICBn
ZXRJbnB1dEZpZWxkOiBmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc3BsYXkuaW5wdXQ7fSwKKyAg
ICBnZXRXcmFwcGVyRWxlbWVudDogZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNwbGF5LndyYXBw
ZXI7fSwKKyAgICBnZXRTY3JvbGxlckVsZW1lbnQ6IGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlz
cGxheS5zY3JvbGxlcjt9LAorICAgIGdldEd1dHRlckVsZW1lbnQ6IGZ1bmN0aW9uKCl7cmV0dXJu
IHRoaXMuZGlzcGxheS5ndXR0ZXJzO30KICAgfTsKIAotICB2YXIgaW9zID0gL0FwcGxlV2ViS2l0
Ly50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpICYmIC9Nb2JpbGVcL1x3Ky8udGVzdChuYXZpZ2F0
b3IudXNlckFnZW50KTsKLSAgdmFyIG1hYyA9IGlvcyB8fCAvTWFjLy50ZXN0KG5hdmlnYXRvci5w
bGF0Zm9ybSk7Ci0gIHZhciB3aW4gPSAvV2luLy50ZXN0KG5hdmlnYXRvci5wbGF0Zm9ybSk7Cisg
IC8vIE9QVElPTiBERUZBVUxUUworCisgIHZhciBvcHRpb25IYW5kbGVycyA9IENvZGVNaXJyb3Iu
b3B0aW9uSGFuZGxlcnMgPSB7fTsKKworICAvLyBUaGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIG9w
dGlvbnMuCisgIHZhciBkZWZhdWx0cyA9IENvZGVNaXJyb3IuZGVmYXVsdHMgPSB7fTsKKworICBm
dW5jdGlvbiBvcHRpb24obmFtZSwgZGVmbHQsIGhhbmRsZSwgbm90T25Jbml0KSB7CisgICAgQ29k
ZU1pcnJvci5kZWZhdWx0c1tuYW1lXSA9IGRlZmx0OworICAgIGlmIChoYW5kbGUpIG9wdGlvbkhh
bmRsZXJzW25hbWVdID0KKyAgICAgIG5vdE9uSW5pdCA/IGZ1bmN0aW9uKGNtLCB2YWwsIG9sZCkg
e2lmIChvbGQgIT0gSW5pdCkgaGFuZGxlKGNtLCB2YWwsIG9sZCk7fSA6IGhhbmRsZTsKKyAgfQor
CisgIHZhciBJbml0ID0gQ29kZU1pcnJvci5Jbml0ID0ge3RvU3RyaW5nOiBmdW5jdGlvbigpe3Jl
dHVybiAiQ29kZU1pcnJvci5Jbml0Ijt9fTsKKworICAvLyBUaGVzZSB0d28gYXJlLCBvbiBpbml0
LCBjYWxsZWQgZnJvbSB0aGUgY29uc3RydWN0b3IgYmVjYXVzZSB0aGV5CisgIC8vIGhhdmUgdG8g
YmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHRoZSBlZGl0b3IgY2FuIHN0YXJ0IGF0IGFsbC4KKyAgb3B0
aW9uKCJ2YWx1ZSIsICIiLCBmdW5jdGlvbihjbSwgdmFsKSB7Y20uc2V0VmFsdWUodmFsKTt9LCB0
cnVlKTsKKyAgb3B0aW9uKCJtb2RlIiwgbnVsbCwgbG9hZE1vZGUsIHRydWUpOworCisgIG9wdGlv
bigiaW5kZW50VW5pdCIsIDIsIGxvYWRNb2RlLCB0cnVlKTsKKyAgb3B0aW9uKCJpbmRlbnRXaXRo
VGFicyIsIGZhbHNlKTsKKyAgb3B0aW9uKCJzbWFydEluZGVudCIsIHRydWUpOworICBvcHRpb24o
InRhYlNpemUiLCA0LCBmdW5jdGlvbihjbSkge2xvYWRNb2RlKGNtKTsgdXBkYXRlRGlzcGxheShj
bSwgdHJ1ZSk7fSwgdHJ1ZSk7CisgIG9wdGlvbigiZWxlY3RyaWNDaGFycyIsIHRydWUpOworICBv
cHRpb24oImF1dG9DbGVhckVtcHR5TGluZXMiLCBmYWxzZSk7CisKKyAgb3B0aW9uKCJ0aGVtZSIs
ICJkZWZhdWx0IiwgZnVuY3Rpb24oY20sIHZhbCwgb2xkKSB7CisgICAgdGhlbWVDaGFuZ2VkKGNt
KTsKKyAgICBpZiAob2xkICE9IEluaXQpIGd1dHRlcnNDaGFuZ2VkKGNtKTsKKyAgfSk7CisgIG9w
dGlvbigia2V5TWFwIiwgImRlZmF1bHQiLCBrZXlNYXBDaGFuZ2VkKTsKKyAgb3B0aW9uKCJleHRy
YUtleXMiLCBudWxsKTsKKworICBvcHRpb24oIm9uS2V5RXZlbnQiLCBudWxsKTsKKyAgb3B0aW9u
KCJvbkRyYWdFdmVudCIsIG51bGwpOworCisgIG9wdGlvbigibGluZVdyYXBwaW5nIiwgZmFsc2Us
IHdyYXBwaW5nQ2hhbmdlZCk7CisgIG9wdGlvbigiZ3V0dGVycyIsIFtdLCBmdW5jdGlvbihjbSkg
eworICAgIHNldEd1dHRlcnNGb3JMaW5lTnVtYmVycyhjbS5vcHRpb25zKTsKKyAgICBndXR0ZXJz
Q2hhbmdlZChjbSk7CisgIH0sIHRydWUpOworICBvcHRpb24oImxpbmVOdW1iZXJzIiwgZmFsc2Us
IGZ1bmN0aW9uKGNtKSB7CisgICAgc2V0R3V0dGVyc0ZvckxpbmVOdW1iZXJzKGNtLm9wdGlvbnMp
OworICAgIGd1dHRlcnNDaGFuZ2VkKGNtKTsKKyAgfSwgdHJ1ZSk7CisgIG9wdGlvbigiZmlyc3RM
aW5lTnVtYmVyIiwgMSwgZ3V0dGVyc0NoYW5nZWQsIGZhbHNlKTsKKyAgb3B0aW9uKCJsaW5lTnVt
YmVyRm9ybWF0dGVyIiwgZnVuY3Rpb24oaW50ZWdlcikge3JldHVybiBpbnRlZ2VyO30sIGd1dHRl
cnNDaGFuZ2VkLCBmYWxzZSk7CisgIAorICBvcHRpb24oInJlYWRPbmx5IiwgZmFsc2UsIGZ1bmN0
aW9uKGNtLCB2YWwpIHsKKyAgICBpZiAodmFsID09ICJub2N1cnNvciIpIHtvbkJsdXIoY20pOyBj
bS5kaXNwbGF5LmlucHV0LmJsdXIoKTt9CisgICAgZWxzZSBpZiAoIXZhbCkgcmVzZXRJbnB1dChj
bSwgdHJ1ZSk7CisgIH0pOworICBvcHRpb24oImRyYWdEcm9wIiwgdHJ1ZSk7CisKKyAgb3B0aW9u
KCJjdXJzb3JCbGlua1JhdGUiLCA1MzApOworICBvcHRpb24oImN1cnNvckhlaWdodCIsIDEpOwor
ICBvcHRpb24oIndvcmtUaW1lIiwgMTAwKTsKKyAgb3B0aW9uKCJ3b3JrRGVsYXkiLCAxMDApOwor
ICBvcHRpb24oImZsYXR0ZW5TcGFucyIsIHRydWUpOworICBvcHRpb24oInBvbGxJbnRlcnZhbCIs
IDEwMCk7CisgIG9wdGlvbigidW5kb0RlcHRoIiwgNDApOworICBvcHRpb24oInZpZXdwb3J0TWFy
Z2luIiwgMTAsIGZ1bmN0aW9uKGNtKXtjbS5yZWZyZXNoKCk7fSwgdHJ1ZSk7CisKKyAgb3B0aW9u
KCJ0YWJpbmRleCIsIG51bGwsIGZ1bmN0aW9uKGNtLCB2YWwpIHsKKyAgICBjbS5kaXNwbGF5Lmlu
cHV0LnRhYkluZGV4ID0gdmFsIHx8ICIiOworICB9KTsKKyAgb3B0aW9uKCJhdXRvZm9jdXMiLCBu
dWxsKTsKKworICAvLyBNT0RFIERFRklOSVRJT04gQU5EIFFVRVJZSU5HCiAKICAgLy8gS25vd24g
bW9kZXMsIGJ5IG5hbWUgYW5kIGJ5IE1JTUUKICAgdmFyIG1vZGVzID0gQ29kZU1pcnJvci5tb2Rl
cyA9IHt9LCBtaW1lTW9kZXMgPSBDb2RlTWlycm9yLm1pbWVNb2RlcyA9IHt9OworCiAgIENvZGVN
aXJyb3IuZGVmaW5lTW9kZSA9IGZ1bmN0aW9uKG5hbWUsIG1vZGUpIHsKICAgICBpZiAoIUNvZGVN
aXJyb3IuZGVmYXVsdHMubW9kZSAmJiBuYW1lICE9ICJudWxsIikgQ29kZU1pcnJvci5kZWZhdWx0
cy5tb2RlID0gbmFtZTsKICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDIpIHsKQEAgLTIwODMs
OSArMjc0OSwxMSBAQCB2YXIgQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICB9CiAgICAg
bW9kZXNbbmFtZV0gPSBtb2RlOwogICB9OworCiAgIENvZGVNaXJyb3IuZGVmaW5lTUlNRSA9IGZ1
bmN0aW9uKG1pbWUsIHNwZWMpIHsKICAgICBtaW1lTW9kZXNbbWltZV0gPSBzcGVjOwogICB9Owor
CiAgIENvZGVNaXJyb3IucmVzb2x2ZU1vZGUgPSBmdW5jdGlvbihzcGVjKSB7CiAgICAgaWYgKHR5
cGVvZiBzcGVjID09ICJzdHJpbmciICYmIG1pbWVNb2Rlcy5oYXNPd25Qcm9wZXJ0eShzcGVjKSkK
ICAgICAgIHNwZWMgPSBtaW1lTW9kZXNbc3BlY107CkBAIC0yMDk0LDM1ICsyNzYyLDgyIEBAIHZh
ciBDb2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIGlmICh0eXBlb2Ygc3BlYyA9PSAic3Ry
aW5nIikgcmV0dXJuIHtuYW1lOiBzcGVjfTsKICAgICBlbHNlIHJldHVybiBzcGVjIHx8IHtuYW1l
OiAibnVsbCJ9OwogICB9OworCiAgIENvZGVNaXJyb3IuZ2V0TW9kZSA9IGZ1bmN0aW9uKG9wdGlv
bnMsIHNwZWMpIHsKICAgICB2YXIgc3BlYyA9IENvZGVNaXJyb3IucmVzb2x2ZU1vZGUoc3BlYyk7
CiAgICAgdmFyIG1mYWN0b3J5ID0gbW9kZXNbc3BlYy5uYW1lXTsKICAgICBpZiAoIW1mYWN0b3J5
KSByZXR1cm4gQ29kZU1pcnJvci5nZXRNb2RlKG9wdGlvbnMsICJ0ZXh0L3BsYWluIik7Ci0gICAg
cmV0dXJuIG1mYWN0b3J5KG9wdGlvbnMsIHNwZWMpOwotICB9OwotICBDb2RlTWlycm9yLmxpc3RN
b2RlcyA9IGZ1bmN0aW9uKCkgewotICAgIHZhciBsaXN0ID0gW107Ci0gICAgZm9yICh2YXIgbSBp
biBtb2RlcykKLSAgICAgIGlmIChtb2Rlcy5wcm9wZXJ0eUlzRW51bWVyYWJsZShtKSkgbGlzdC5w
dXNoKG0pOwotICAgIHJldHVybiBsaXN0OworICAgIHZhciBtb2RlT2JqID0gbWZhY3Rvcnkob3B0
aW9ucywgc3BlYyk7CisgICAgaWYgKG1vZGVFeHRlbnNpb25zLmhhc093blByb3BlcnR5KHNwZWMu
bmFtZSkpIHsKKyAgICAgIHZhciBleHRzID0gbW9kZUV4dGVuc2lvbnNbc3BlYy5uYW1lXTsKKyAg
ICAgIGZvciAodmFyIHByb3AgaW4gZXh0cykgaWYgKGV4dHMuaGFzT3duUHJvcGVydHkocHJvcCkp
IG1vZGVPYmpbcHJvcF0gPSBleHRzW3Byb3BdOworICAgIH0KKyAgICBtb2RlT2JqLm5hbWUgPSBz
cGVjLm5hbWU7CisgICAgcmV0dXJuIG1vZGVPYmo7CiAgIH07Ci0gIENvZGVNaXJyb3IubGlzdE1J
TUVzID0gZnVuY3Rpb24oKSB7Ci0gICAgdmFyIGxpc3QgPSBbXTsKLSAgICBmb3IgKHZhciBtIGlu
IG1pbWVNb2RlcykKLSAgICAgIGlmIChtaW1lTW9kZXMucHJvcGVydHlJc0VudW1lcmFibGUobSkp
IGxpc3QucHVzaCh7bWltZTogbSwgbW9kZTogbWltZU1vZGVzW21dfSk7Ci0gICAgcmV0dXJuIGxp
c3Q7CisKKyAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJudWxsIiwgZnVuY3Rpb24oKSB7CisgICAg
cmV0dXJuIHt0b2tlbjogZnVuY3Rpb24oc3RyZWFtKSB7c3RyZWFtLnNraXBUb0VuZCgpO319Owor
ICB9KTsKKyAgQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3BsYWluIiwgIm51bGwiKTsKKwor
ICB2YXIgbW9kZUV4dGVuc2lvbnMgPSBDb2RlTWlycm9yLm1vZGVFeHRlbnNpb25zID0ge307Cisg
IENvZGVNaXJyb3IuZXh0ZW5kTW9kZSA9IGZ1bmN0aW9uKG1vZGUsIHByb3BlcnRpZXMpIHsKKyAg
ICB2YXIgZXh0cyA9IG1vZGVFeHRlbnNpb25zLmhhc093blByb3BlcnR5KG1vZGUpID8gbW9kZUV4
dGVuc2lvbnNbbW9kZV0gOiAobW9kZUV4dGVuc2lvbnNbbW9kZV0gPSB7fSk7CisgICAgZm9yICh2
YXIgcHJvcCBpbiBwcm9wZXJ0aWVzKSBpZiAocHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShwcm9w
KSkKKyAgICAgIGV4dHNbcHJvcF0gPSBwcm9wZXJ0aWVzW3Byb3BdOwogICB9OwogCi0gIHZhciBl
eHRlbnNpb25zID0gQ29kZU1pcnJvci5leHRlbnNpb25zID0ge307CisgIC8vIEVYVEVOU0lPTlMK
KwogICBDb2RlTWlycm9yLmRlZmluZUV4dGVuc2lvbiA9IGZ1bmN0aW9uKG5hbWUsIGZ1bmMpIHsK
LSAgICBleHRlbnNpb25zW25hbWVdID0gZnVuYzsKKyAgICBDb2RlTWlycm9yLnByb3RvdHlwZVtu
YW1lXSA9IGZ1bmM7CisgIH07CisKKyAgQ29kZU1pcnJvci5kZWZpbmVPcHRpb24gPSBvcHRpb247
CisKKyAgdmFyIGluaXRIb29rcyA9IFtdOworICBDb2RlTWlycm9yLmRlZmluZUluaXRIb29rID0g
ZnVuY3Rpb24oZikge2luaXRIb29rcy5wdXNoKGYpO307CisKKyAgLy8gTU9ERSBTVEFURSBIQU5E
TElORworCisgIC8vIFV0aWxpdHkgZnVuY3Rpb25zIGZvciB3b3JraW5nIHdpdGggc3RhdGUuIEV4
cG9ydGVkIGJlY2F1c2UgbW9kZXMKKyAgLy8gc29tZXRpbWVzIG5lZWQgdG8gZG8gdGhpcy4KKyAg
ZnVuY3Rpb24gY29weVN0YXRlKG1vZGUsIHN0YXRlKSB7CisgICAgaWYgKHN0YXRlID09PSB0cnVl
KSByZXR1cm4gc3RhdGU7CisgICAgaWYgKG1vZGUuY29weVN0YXRlKSByZXR1cm4gbW9kZS5jb3B5
U3RhdGUoc3RhdGUpOworICAgIHZhciBuc3RhdGUgPSB7fTsKKyAgICBmb3IgKHZhciBuIGluIHN0
YXRlKSB7CisgICAgICB2YXIgdmFsID0gc3RhdGVbbl07CisgICAgICBpZiAodmFsIGluc3RhbmNl
b2YgQXJyYXkpIHZhbCA9IHZhbC5jb25jYXQoW10pOworICAgICAgbnN0YXRlW25dID0gdmFsOwor
ICAgIH0KKyAgICByZXR1cm4gbnN0YXRlOworICB9CisgIENvZGVNaXJyb3IuY29weVN0YXRlID0g
Y29weVN0YXRlOworCisgIGZ1bmN0aW9uIHN0YXJ0U3RhdGUobW9kZSwgYTEsIGEyKSB7CisgICAg
cmV0dXJuIG1vZGUuc3RhcnRTdGF0ZSA/IG1vZGUuc3RhcnRTdGF0ZShhMSwgYTIpIDogdHJ1ZTsK
KyAgfQorICBDb2RlTWlycm9yLnN0YXJ0U3RhdGUgPSBzdGFydFN0YXRlOworCisgIENvZGVNaXJy
b3IuaW5uZXJNb2RlID0gZnVuY3Rpb24obW9kZSwgc3RhdGUpIHsKKyAgICB3aGlsZSAobW9kZS5p
bm5lck1vZGUpIHsKKyAgICAgIHZhciBpbmZvID0gbW9kZS5pbm5lck1vZGUoc3RhdGUpOworICAg
ICAgc3RhdGUgPSBpbmZvLnN0YXRlOworICAgICAgbW9kZSA9IGluZm8ubW9kZTsKKyAgICB9Cisg
ICAgcmV0dXJuIGluZm8gfHwge21vZGU6IG1vZGUsIHN0YXRlOiBzdGF0ZX07CiAgIH07CiAKKyAg
Ly8gU1RBTkRBUkQgQ09NTUFORFMKKwogICB2YXIgY29tbWFuZHMgPSBDb2RlTWlycm9yLmNvbW1h
bmRzID0gewogICAgIHNlbGVjdEFsbDogZnVuY3Rpb24oY20pIHtjbS5zZXRTZWxlY3Rpb24oe2xp
bmU6IDAsIGNoOiAwfSwge2xpbmU6IGNtLmxpbmVDb3VudCgpIC0gMX0pO30sCiAgICAga2lsbExp
bmU6IGZ1bmN0aW9uKGNtKSB7CiAgICAgICB2YXIgZnJvbSA9IGNtLmdldEN1cnNvcih0cnVlKSwg
dG8gPSBjbS5nZXRDdXJzb3IoZmFsc2UpLCBzZWwgPSAhcG9zRXEoZnJvbSwgdG8pOwotICAgICAg
aWYgKCFzZWwgJiYgY20uZ2V0TGluZShmcm9tLmxpbmUpLmxlbmd0aCA9PSBmcm9tLmNoKSBjbS5y
ZXBsYWNlUmFuZ2UoIiIsIGZyb20sIHtsaW5lOiBmcm9tLmxpbmUgKyAxLCBjaDogMH0pOworICAg
ICAgaWYgKCFzZWwgJiYgY20uZ2V0TGluZShmcm9tLmxpbmUpLmxlbmd0aCA9PSBmcm9tLmNoKQor
ICAgICAgICBjbS5yZXBsYWNlUmFuZ2UoIiIsIGZyb20sIHtsaW5lOiBmcm9tLmxpbmUgKyAxLCBj
aDogMH0pOwogICAgICAgZWxzZSBjbS5yZXBsYWNlUmFuZ2UoIiIsIGZyb20sIHNlbCA/IHRvIDog
e2xpbmU6IGZyb20ubGluZX0pOwogICAgIH0sCiAgICAgZGVsZXRlTGluZTogZnVuY3Rpb24oY20p
IHt2YXIgbCA9IGNtLmdldEN1cnNvcigpLmxpbmU7IGNtLnJlcGxhY2VSYW5nZSgiIiwge2xpbmU6
IGwsIGNoOiAwfSwge2xpbmU6IGx9KTt9LApAQCAtMjEzMCwxMyArMjg0NSwyMiBAQCB2YXIgQ29k
ZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICByZWRvOiBmdW5jdGlvbihjbSkge2NtLnJlZG8o
KTt9LAogICAgIGdvRG9jU3RhcnQ6IGZ1bmN0aW9uKGNtKSB7Y20uc2V0Q3Vyc29yKDAsIDAsIHRy
dWUpO30sCiAgICAgZ29Eb2NFbmQ6IGZ1bmN0aW9uKGNtKSB7Y20uc2V0U2VsZWN0aW9uKHtsaW5l
OiBjbS5saW5lQ291bnQoKSAtIDF9LCBudWxsLCB0cnVlKTt9LAotICAgIGdvTGluZVN0YXJ0OiBm
dW5jdGlvbihjbSkge2NtLnNldEN1cnNvcihjbS5nZXRDdXJzb3IoKS5saW5lLCAwLCB0cnVlKTt9
LAorICAgIGdvTGluZVN0YXJ0OiBmdW5jdGlvbihjbSkgeworICAgICAgY20uc2V0Q3Vyc29yKGxp
bmVTdGFydChjbSwgY20uZ2V0Q3Vyc29yKCkubGluZSksIG51bGwsIHRydWUpOworICAgIH0sCiAg
ICAgZ29MaW5lU3RhcnRTbWFydDogZnVuY3Rpb24oY20pIHsKLSAgICAgIHZhciBjdXIgPSBjbS5n
ZXRDdXJzb3IoKTsKLSAgICAgIHZhciB0ZXh0ID0gY20uZ2V0TGluZShjdXIubGluZSksIGZpcnN0
Tm9uV1MgPSBNYXRoLm1heCgwLCB0ZXh0LnNlYXJjaCgvXFMvKSk7Ci0gICAgICBjbS5zZXRDdXJz
b3IoY3VyLmxpbmUsIGN1ci5jaCA8PSBmaXJzdE5vbldTICYmIGN1ci5jaCA/IDAgOiBmaXJzdE5v
bldTLCB0cnVlKTsKKyAgICAgIHZhciBjdXIgPSBjbS5nZXRDdXJzb3IoKSwgc3RhcnQgPSBsaW5l
U3RhcnQoY20sIGN1ci5saW5lKTsKKyAgICAgIHZhciBsaW5lID0gY20uZ2V0TGluZUhhbmRsZShz
dGFydC5saW5lKTsKKyAgICAgIHZhciBvcmRlciA9IGdldE9yZGVyKGxpbmUpOworICAgICAgaWYg
KCFvcmRlciB8fCBvcmRlclswXS5sZXZlbCA9PSAwKSB7CisgICAgICAgIHZhciBmaXJzdE5vbldT
ID0gTWF0aC5tYXgoMCwgbGluZS50ZXh0LnNlYXJjaCgvXFMvKSk7CisgICAgICAgIHZhciBpbldT
ID0gY3VyLmxpbmUgPT0gc3RhcnQubGluZSAmJiBjdXIuY2ggPD0gZmlyc3ROb25XUyAmJiBjdXIu
Y2g7CisgICAgICAgIGNtLnNldEN1cnNvcihzdGFydC5saW5lLCBpbldTID8gMCA6IGZpcnN0Tm9u
V1MsIHRydWUpOworICAgICAgfSBlbHNlIGNtLnNldEN1cnNvcihzdGFydCwgbnVsbCwgdHJ1ZSk7
CisgICAgfSwKKyAgICBnb0xpbmVFbmQ6IGZ1bmN0aW9uKGNtKSB7CisgICAgICBjbS5zZXRDdXJz
b3IobGluZUVuZChjbSwgY20uZ2V0Q3Vyc29yKCkubGluZSksIG51bGwsIHRydWUpOwogICAgIH0s
Ci0gICAgZ29MaW5lRW5kOiBmdW5jdGlvbihjbSkge2NtLnNldFNlbGVjdGlvbih7bGluZTogY20u
Z2V0Q3Vyc29yKCkubGluZX0sIG51bGwsIHRydWUpO30sCiAgICAgZ29MaW5lVXA6IGZ1bmN0aW9u
KGNtKSB7Y20ubW92ZVYoLTEsICJsaW5lIik7fSwKICAgICBnb0xpbmVEb3duOiBmdW5jdGlvbihj
bSkge2NtLm1vdmVWKDEsICJsaW5lIik7fSwKICAgICBnb1BhZ2VVcDogZnVuY3Rpb24oY20pIHtj
bS5tb3ZlVigtMSwgInBhZ2UiKTt9LApAQCAtMjE0NywxMCArMjg3MSwxMCBAQCB2YXIgQ29kZU1p
cnJvciA9IChmdW5jdGlvbigpIHsKICAgICBnb0NvbHVtblJpZ2h0OiBmdW5jdGlvbihjbSkge2Nt
Lm1vdmVIKDEsICJjb2x1bW4iKTt9LAogICAgIGdvV29yZExlZnQ6IGZ1bmN0aW9uKGNtKSB7Y20u
bW92ZUgoLTEsICJ3b3JkIik7fSwKICAgICBnb1dvcmRSaWdodDogZnVuY3Rpb24oY20pIHtjbS5t
b3ZlSCgxLCAid29yZCIpO30sCi0gICAgZGVsQ2hhckxlZnQ6IGZ1bmN0aW9uKGNtKSB7Y20uZGVs
ZXRlSCgtMSwgImNoYXIiKTt9LAotICAgIGRlbENoYXJSaWdodDogZnVuY3Rpb24oY20pIHtjbS5k
ZWxldGVIKDEsICJjaGFyIik7fSwKLSAgICBkZWxXb3JkTGVmdDogZnVuY3Rpb24oY20pIHtjbS5k
ZWxldGVIKC0xLCAid29yZCIpO30sCi0gICAgZGVsV29yZFJpZ2h0OiBmdW5jdGlvbihjbSkge2Nt
LmRlbGV0ZUgoMSwgIndvcmQiKTt9LAorICAgIGRlbENoYXJCZWZvcmU6IGZ1bmN0aW9uKGNtKSB7
Y20uZGVsZXRlSCgtMSwgImNoYXIiKTt9LAorICAgIGRlbENoYXJBZnRlcjogZnVuY3Rpb24oY20p
IHtjbS5kZWxldGVIKDEsICJjaGFyIik7fSwKKyAgICBkZWxXb3JkQmVmb3JlOiBmdW5jdGlvbihj
bSkge2NtLmRlbGV0ZUgoLTEsICJ3b3JkIik7fSwKKyAgICBkZWxXb3JkQWZ0ZXI6IGZ1bmN0aW9u
KGNtKSB7Y20uZGVsZXRlSCgxLCAid29yZCIpO30sCiAgICAgaW5kZW50QXV0bzogZnVuY3Rpb24o
Y20pIHtjbS5pbmRlbnRTZWxlY3Rpb24oInNtYXJ0Iik7fSwKICAgICBpbmRlbnRNb3JlOiBmdW5j
dGlvbihjbSkge2NtLmluZGVudFNlbGVjdGlvbigiYWRkIik7fSwKICAgICBpbmRlbnRMZXNzOiBm
dW5jdGlvbihjbSkge2NtLmluZGVudFNlbGVjdGlvbigic3VidHJhY3QiKTt9LApAQCAtMjE3Miwx
MSArMjg5NiwxMyBAQCB2YXIgQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICB0b2dnbGVP
dmVyd3JpdGU6IGZ1bmN0aW9uKGNtKSB7Y20udG9nZ2xlT3ZlcndyaXRlKCk7fQogICB9OwogCisg
IC8vIFNUQU5EQVJEIEtFWU1BUFMKKwogICB2YXIga2V5TWFwID0gQ29kZU1pcnJvci5rZXlNYXAg
PSB7fTsKICAga2V5TWFwLmJhc2ljID0gewogICAgICJMZWZ0IjogImdvQ2hhckxlZnQiLCAiUmln
aHQiOiAiZ29DaGFyUmlnaHQiLCAiVXAiOiAiZ29MaW5lVXAiLCAiRG93biI6ICJnb0xpbmVEb3du
IiwKICAgICAiRW5kIjogImdvTGluZUVuZCIsICJIb21lIjogImdvTGluZVN0YXJ0U21hcnQiLCAi
UGFnZVVwIjogImdvUGFnZVVwIiwgIlBhZ2VEb3duIjogImdvUGFnZURvd24iLAotICAgICJEZWxl
dGUiOiAiZGVsQ2hhclJpZ2h0IiwgIkJhY2tzcGFjZSI6ICJkZWxDaGFyTGVmdCIsICJUYWIiOiAi
ZGVmYXVsdFRhYiIsICJTaGlmdC1UYWIiOiAiaW5kZW50QXV0byIsCisgICAgIkRlbGV0ZSI6ICJk
ZWxDaGFyQWZ0ZXIiLCAiQmFja3NwYWNlIjogImRlbENoYXJCZWZvcmUiLCAiVGFiIjogImRlZmF1
bHRUYWIiLCAiU2hpZnQtVGFiIjogImluZGVudEF1dG8iLAogICAgICJFbnRlciI6ICJuZXdsaW5l
QW5kSW5kZW50IiwgIkluc2VydCI6ICJ0b2dnbGVPdmVyd3JpdGUiCiAgIH07CiAgIC8vIE5vdGUg
dGhhdCB0aGUgc2F2ZSBhbmQgZmluZC1yZWxhdGVkIGNvbW1hbmRzIGFyZW4ndCBkZWZpbmVkIGJ5
CkBAIC0yMTg1LDcgKzI5MTEsNyBAQCB2YXIgQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAg
ICAiQ3RybC1BIjogInNlbGVjdEFsbCIsICJDdHJsLUQiOiAiZGVsZXRlTGluZSIsICJDdHJsLVoi
OiAidW5kbyIsICJTaGlmdC1DdHJsLVoiOiAicmVkbyIsICJDdHJsLVkiOiAicmVkbyIsCiAgICAg
IkN0cmwtSG9tZSI6ICJnb0RvY1N0YXJ0IiwgIkFsdC1VcCI6ICJnb0RvY1N0YXJ0IiwgIkN0cmwt
RW5kIjogImdvRG9jRW5kIiwgIkN0cmwtRG93biI6ICJnb0RvY0VuZCIsCiAgICAgIkN0cmwtTGVm
dCI6ICJnb1dvcmRMZWZ0IiwgIkN0cmwtUmlnaHQiOiAiZ29Xb3JkUmlnaHQiLCAiQWx0LUxlZnQi
OiAiZ29MaW5lU3RhcnQiLCAiQWx0LVJpZ2h0IjogImdvTGluZUVuZCIsCi0gICAgIkN0cmwtQmFj
a3NwYWNlIjogImRlbFdvcmRMZWZ0IiwgIkN0cmwtRGVsZXRlIjogImRlbFdvcmRSaWdodCIsICJD
dHJsLVMiOiAic2F2ZSIsICJDdHJsLUYiOiAiZmluZCIsCisgICAgIkN0cmwtQmFja3NwYWNlIjog
ImRlbFdvcmRCZWZvcmUiLCAiQ3RybC1EZWxldGUiOiAiZGVsV29yZEFmdGVyIiwgIkN0cmwtUyI6
ICJzYXZlIiwgIkN0cmwtRiI6ICJmaW5kIiwKICAgICAiQ3RybC1HIjogImZpbmROZXh0IiwgIlNo
aWZ0LUN0cmwtRyI6ICJmaW5kUHJldiIsICJTaGlmdC1DdHJsLUYiOiAicmVwbGFjZSIsICJTaGlm
dC1DdHJsLVIiOiAicmVwbGFjZUFsbCIsCiAgICAgIkN0cmwtWyI6ICJpbmRlbnRMZXNzIiwgIkN0
cmwtXSI6ICJpbmRlbnRNb3JlIiwKICAgICBmYWxsdGhyb3VnaDogImJhc2ljIgpAQCAtMjE5Myw4
ICsyOTE5LDggQEAgdmFyIENvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgIGtleU1hcC5tYWNE
ZWZhdWx0ID0gewogICAgICJDbWQtQSI6ICJzZWxlY3RBbGwiLCAiQ21kLUQiOiAiZGVsZXRlTGlu
ZSIsICJDbWQtWiI6ICJ1bmRvIiwgIlNoaWZ0LUNtZC1aIjogInJlZG8iLCAiQ21kLVkiOiAicmVk
byIsCiAgICAgIkNtZC1VcCI6ICJnb0RvY1N0YXJ0IiwgIkNtZC1FbmQiOiAiZ29Eb2NFbmQiLCAi
Q21kLURvd24iOiAiZ29Eb2NFbmQiLCAiQWx0LUxlZnQiOiAiZ29Xb3JkTGVmdCIsCi0gICAgIkFs
dC1SaWdodCI6ICJnb1dvcmRSaWdodCIsICJDbWQtTGVmdCI6ICJnb0xpbmVTdGFydCIsICJDbWQt
UmlnaHQiOiAiZ29MaW5lRW5kIiwgIkFsdC1CYWNrc3BhY2UiOiAiZGVsV29yZExlZnQiLAotICAg
ICJDdHJsLUFsdC1CYWNrc3BhY2UiOiAiZGVsV29yZFJpZ2h0IiwgIkFsdC1EZWxldGUiOiAiZGVs
V29yZFJpZ2h0IiwgIkNtZC1TIjogInNhdmUiLCAiQ21kLUYiOiAiZmluZCIsCisgICAgIkFsdC1S
aWdodCI6ICJnb1dvcmRSaWdodCIsICJDbWQtTGVmdCI6ICJnb0xpbmVTdGFydCIsICJDbWQtUmln
aHQiOiAiZ29MaW5lRW5kIiwgIkFsdC1CYWNrc3BhY2UiOiAiZGVsV29yZEJlZm9yZSIsCisgICAg
IkN0cmwtQWx0LUJhY2tzcGFjZSI6ICJkZWxXb3JkQWZ0ZXIiLCAiQWx0LURlbGV0ZSI6ICJkZWxX
b3JkQWZ0ZXIiLCAiQ21kLVMiOiAic2F2ZSIsICJDbWQtRiI6ICJmaW5kIiwKICAgICAiQ21kLUci
OiAiZmluZE5leHQiLCAiU2hpZnQtQ21kLUciOiAiZmluZFByZXYiLCAiQ21kLUFsdC1GIjogInJl
cGxhY2UiLCAiU2hpZnQtQ21kLUFsdC1GIjogInJlcGxhY2VBbGwiLAogICAgICJDbWQtWyI6ICJp
bmRlbnRMZXNzIiwgIkNtZC1dIjogImluZGVudE1vcmUiLAogICAgIGZhbGx0aHJvdWdoOiBbImJh
c2ljIiwgImVtYWNzeSJdCkBAIC0yMjAzLDE0ICsyOTI5LDE3IEBAIHZhciBDb2RlTWlycm9yID0g
KGZ1bmN0aW9uKCkgewogICBrZXlNYXAuZW1hY3N5ID0gewogICAgICJDdHJsLUYiOiAiZ29DaGFy
UmlnaHQiLCAiQ3RybC1CIjogImdvQ2hhckxlZnQiLCAiQ3RybC1QIjogImdvTGluZVVwIiwgIkN0
cmwtTiI6ICJnb0xpbmVEb3duIiwKICAgICAiQWx0LUYiOiAiZ29Xb3JkUmlnaHQiLCAiQWx0LUIi
OiAiZ29Xb3JkTGVmdCIsICJDdHJsLUEiOiAiZ29MaW5lU3RhcnQiLCAiQ3RybC1FIjogImdvTGlu
ZUVuZCIsCi0gICAgIkN0cmwtViI6ICJnb1BhZ2VVcCIsICJTaGlmdC1DdHJsLVYiOiAiZ29QYWdl
RG93biIsICJDdHJsLUQiOiAiZGVsQ2hhclJpZ2h0IiwgIkN0cmwtSCI6ICJkZWxDaGFyTGVmdCIs
Ci0gICAgIkFsdC1EIjogImRlbFdvcmRSaWdodCIsICJBbHQtQmFja3NwYWNlIjogImRlbFdvcmRM
ZWZ0IiwgIkN0cmwtSyI6ICJraWxsTGluZSIsICJDdHJsLVQiOiAidHJhbnNwb3NlQ2hhcnMiCisg
ICAgIkN0cmwtViI6ICJnb1BhZ2VVcCIsICJTaGlmdC1DdHJsLVYiOiAiZ29QYWdlRG93biIsICJD
dHJsLUQiOiAiZGVsQ2hhckFmdGVyIiwgIkN0cmwtSCI6ICJkZWxDaGFyQmVmb3JlIiwKKyAgICAi
QWx0LUQiOiAiZGVsV29yZEFmdGVyIiwgIkFsdC1CYWNrc3BhY2UiOiAiZGVsV29yZEJlZm9yZSIs
ICJDdHJsLUsiOiAia2lsbExpbmUiLCAiQ3RybC1UIjogInRyYW5zcG9zZUNoYXJzIgogICB9Owog
CisgIC8vIEtFWU1BUCBESVNQQVRDSAorCiAgIGZ1bmN0aW9uIGdldEtleU1hcCh2YWwpIHsKICAg
ICBpZiAodHlwZW9mIHZhbCA9PSAic3RyaW5nIikgcmV0dXJuIGtleU1hcFt2YWxdOwogICAgIGVs
c2UgcmV0dXJuIHZhbDsKICAgfQorCiAgIGZ1bmN0aW9uIGxvb2t1cEtleShuYW1lLCBleHRyYU1h
cCwgbWFwLCBoYW5kbGUsIHN0b3ApIHsKICAgICBmdW5jdGlvbiBsb29rdXAobWFwKSB7CiAgICAg
ICBtYXAgPSBnZXRLZXlNYXAobWFwKTsKQEAgLTIyNDAsMTkgKzI5NjksMjkgQEAgdmFyIENvZGVN
aXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgdmFyIG5hbWUgPSBrZXlOYW1lc1tlX3Byb3AoZXZl
bnQsICJrZXlDb2RlIildOwogICAgIHJldHVybiBuYW1lID09ICJDdHJsIiB8fCBuYW1lID09ICJB
bHQiIHx8IG5hbWUgPT0gIlNoaWZ0IiB8fCBuYW1lID09ICJNb2QiOwogICB9CisgIENvZGVNaXJy
b3IuaXNNb2RpZmllcktleSA9IGlzTW9kaWZpZXJLZXk7CisKKyAgLy8gRlJPTVRFWFRBUkVBCiAK
ICAgQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEgPSBmdW5jdGlvbih0ZXh0YXJlYSwgb3B0aW9ucykg
ewogICAgIGlmICghb3B0aW9ucykgb3B0aW9ucyA9IHt9OwogICAgIG9wdGlvbnMudmFsdWUgPSB0
ZXh0YXJlYS52YWx1ZTsKICAgICBpZiAoIW9wdGlvbnMudGFiaW5kZXggJiYgdGV4dGFyZWEudGFi
aW5kZXgpCiAgICAgICBvcHRpb25zLnRhYmluZGV4ID0gdGV4dGFyZWEudGFiaW5kZXg7Ci0gICAg
aWYgKG9wdGlvbnMuYXV0b2ZvY3VzID09IG51bGwgJiYgdGV4dGFyZWEuZ2V0QXR0cmlidXRlKCJh
dXRvZm9jdXMiKSAhPSBudWxsKQotICAgICAgb3B0aW9ucy5hdXRvZm9jdXMgPSB0cnVlOworICAg
IC8vIFNldCBhdXRvZm9jdXMgdG8gdHJ1ZSBpZiB0aGlzIHRleHRhcmVhIGlzIGZvY3VzZWQsIG9y
IGlmIGl0IGhhcworICAgIC8vIGF1dG9mb2N1cyBhbmQgbm8gb3RoZXIgZWxlbWVudCBpcyBmb2N1
c2VkLgorICAgIGlmIChvcHRpb25zLmF1dG9mb2N1cyA9PSBudWxsKSB7CisgICAgICB2YXIgaGFz
Rm9jdXMgPSBkb2N1bWVudC5ib2R5OworICAgICAgLy8gZG9jLmFjdGl2ZUVsZW1lbnQgb2NjYXNp
b25hbGx5IHRocm93cyBvbiBJRQorICAgICAgdHJ5IHsgaGFzRm9jdXMgPSBkb2N1bWVudC5hY3Rp
dmVFbGVtZW50OyB9IGNhdGNoKGUpIHt9CisgICAgICBvcHRpb25zLmF1dG9mb2N1cyA9IGhhc0Zv
Y3VzID09IHRleHRhcmVhIHx8CisgICAgICAgIHRleHRhcmVhLmdldEF0dHJpYnV0ZSgiYXV0b2Zv
Y3VzIikgIT0gbnVsbCAmJiBoYXNGb2N1cyA9PSBkb2N1bWVudC5ib2R5OworICAgIH0KIAotICAg
IGZ1bmN0aW9uIHNhdmUoKSB7dGV4dGFyZWEudmFsdWUgPSBpbnN0YW5jZS5nZXRWYWx1ZSgpO30K
KyAgICBmdW5jdGlvbiBzYXZlKCkge3RleHRhcmVhLnZhbHVlID0gY20uZ2V0VmFsdWUoKTt9CiAg
ICAgaWYgKHRleHRhcmVhLmZvcm0pIHsKICAgICAgIC8vIERlcGxvcmFibGUgaGFjayB0byBtYWtl
IHRoZSBzdWJtaXQgbWV0aG9kIGRvIHRoZSByaWdodCB0aGluZy4KLSAgICAgIHZhciBybVN1Ym1p
dCA9IGNvbm5lY3QodGV4dGFyZWEuZm9ybSwgInN1Ym1pdCIsIHNhdmUsIHRydWUpOworICAgICAg
b24odGV4dGFyZWEuZm9ybSwgInN1Ym1pdCIsIHNhdmUpOwogICAgICAgaWYgKHR5cGVvZiB0ZXh0
YXJlYS5mb3JtLnN1Ym1pdCA9PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgIHZhciByZWFsU3VibWl0
ID0gdGV4dGFyZWEuZm9ybS5zdWJtaXQ7CiAgICAgICAgIHRleHRhcmVhLmZvcm0uc3VibWl0ID0g
ZnVuY3Rpb24gd3JhcHBlZFN1Ym1pdCgpIHsKQEAgLTIyNjUsNTQgKzMwMDQsMjggQEAgdmFyIENv
ZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgfQogCiAgICAgdGV4dGFyZWEuc3R5bGUuZGlz
cGxheSA9ICJub25lIjsKLSAgICB2YXIgaW5zdGFuY2UgPSBDb2RlTWlycm9yKGZ1bmN0aW9uKG5v
ZGUpIHsKKyAgICB2YXIgY20gPSBDb2RlTWlycm9yKGZ1bmN0aW9uKG5vZGUpIHsKICAgICAgIHRl
eHRhcmVhLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG5vZGUsIHRleHRhcmVhLm5leHRTaWJsaW5n
KTsKICAgICB9LCBvcHRpb25zKTsKLSAgICBpbnN0YW5jZS5zYXZlID0gc2F2ZTsKLSAgICBpbnN0
YW5jZS5nZXRUZXh0QXJlYSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGV4dGFyZWE7IH07Ci0gICAg
aW5zdGFuY2UudG9UZXh0QXJlYSA9IGZ1bmN0aW9uKCkgeworICAgIGNtLnNhdmUgPSBzYXZlOwor
ICAgIGNtLmdldFRleHRBcmVhID0gZnVuY3Rpb24oKSB7IHJldHVybiB0ZXh0YXJlYTsgfTsKKyAg
ICBjbS50b1RleHRBcmVhID0gZnVuY3Rpb24oKSB7CiAgICAgICBzYXZlKCk7Ci0gICAgICB0ZXh0
YXJlYS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGluc3RhbmNlLmdldFdyYXBwZXJFbGVtZW50KCkp
OworICAgICAgdGV4dGFyZWEucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjbS5nZXRXcmFwcGVyRWxl
bWVudCgpKTsKICAgICAgIHRleHRhcmVhLnN0eWxlLmRpc3BsYXkgPSAiIjsKICAgICAgIGlmICh0
ZXh0YXJlYS5mb3JtKSB7Ci0gICAgICAgIHJtU3VibWl0KCk7CisgICAgICAgIG9mZih0ZXh0YXJl
YS5mb3JtLCAic3VibWl0Iiwgc2F2ZSk7CiAgICAgICAgIGlmICh0eXBlb2YgdGV4dGFyZWEuZm9y
bS5zdWJtaXQgPT0gImZ1bmN0aW9uIikKICAgICAgICAgICB0ZXh0YXJlYS5mb3JtLnN1Ym1pdCA9
IHJlYWxTdWJtaXQ7CiAgICAgICB9CiAgICAgfTsKLSAgICByZXR1cm4gaW5zdGFuY2U7CisgICAg
cmV0dXJuIGNtOwogICB9OwogCi0gIHZhciBnZWNrbyA9IC9nZWNrb1wvXGR7N30vaS50ZXN0KG5h
dmlnYXRvci51c2VyQWdlbnQpOwotICB2YXIgaWUgPSAvTVNJRSBcZC8udGVzdChuYXZpZ2F0b3Iu
dXNlckFnZW50KTsKLSAgdmFyIGllX2x0OCA9IC9NU0lFIFsxLTddXGIvLnRlc3QobmF2aWdhdG9y
LnVzZXJBZ2VudCk7Ci0gIHZhciBpZV9sdDkgPSAvTVNJRSBbMS04XVxiLy50ZXN0KG5hdmlnYXRv
ci51c2VyQWdlbnQpOwotICB2YXIgcXVpcmtzTW9kZSA9IGllICYmIGRvY3VtZW50LmRvY3VtZW50
TW9kZSA9PSA1OwotICB2YXIgd2Via2l0ID0gL1dlYktpdFwvLy50ZXN0KG5hdmlnYXRvci51c2Vy
QWdlbnQpOwotICB2YXIgY2hyb21lID0gL0Nocm9tZVwvLy50ZXN0KG5hdmlnYXRvci51c2VyQWdl
bnQpOwotICB2YXIgb3BlcmEgPSAvT3BlcmFcLy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTsK
LSAgdmFyIHNhZmFyaSA9IC9BcHBsZSBDb21wdXRlci8udGVzdChuYXZpZ2F0b3IudmVuZG9yKTsK
LSAgdmFyIGtodG1sID0gL0tIVE1MXC8vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7Ci0gIHZh
ciBtYWNfZ2VMaW9uID0gL01hYyBPUyBYIDEwXEQoWzctOV18XGRcZClcRC8udGVzdChuYXZpZ2F0
b3IudXNlckFnZW50KTsKKyAgLy8gU1RSSU5HIFNUUkVBTQogCi0gIC8vIFV0aWxpdHkgZnVuY3Rp
b25zIGZvciB3b3JraW5nIHdpdGggc3RhdGUuIEV4cG9ydGVkIGJlY2F1c2UgbW9kZXMKLSAgLy8g
c29tZXRpbWVzIG5lZWQgdG8gZG8gdGhpcy4KLSAgZnVuY3Rpb24gY29weVN0YXRlKG1vZGUsIHN0
YXRlKSB7Ci0gICAgaWYgKHN0YXRlID09PSB0cnVlKSByZXR1cm4gc3RhdGU7Ci0gICAgaWYgKG1v
ZGUuY29weVN0YXRlKSByZXR1cm4gbW9kZS5jb3B5U3RhdGUoc3RhdGUpOwotICAgIHZhciBuc3Rh
dGUgPSB7fTsKLSAgICBmb3IgKHZhciBuIGluIHN0YXRlKSB7Ci0gICAgICB2YXIgdmFsID0gc3Rh
dGVbbl07Ci0gICAgICBpZiAodmFsIGluc3RhbmNlb2YgQXJyYXkpIHZhbCA9IHZhbC5jb25jYXQo
W10pOwotICAgICAgbnN0YXRlW25dID0gdmFsOwotICAgIH0KLSAgICByZXR1cm4gbnN0YXRlOwot
ICB9Ci0gIENvZGVNaXJyb3IuY29weVN0YXRlID0gY29weVN0YXRlOwotICBmdW5jdGlvbiBzdGFy
dFN0YXRlKG1vZGUsIGExLCBhMikgewotICAgIHJldHVybiBtb2RlLnN0YXJ0U3RhdGUgPyBtb2Rl
LnN0YXJ0U3RhdGUoYTEsIGEyKSA6IHRydWU7Ci0gIH0KLSAgQ29kZU1pcnJvci5zdGFydFN0YXRl
ID0gc3RhcnRTdGF0ZTsKKyAgLy8gRmVkIHRvIHRoZSBtb2RlIHBhcnNlcnMsIHByb3ZpZGVzIGhl
bHBlciBmdW5jdGlvbnMgdG8gbWFrZQorICAvLyBwYXJzZXJzIG1vcmUgc3VjY2luY3QuCiAKICAg
Ly8gVGhlIGNoYXJhY3RlciBzdHJlYW0gdXNlZCBieSBhIG1vZGUncyBwYXJzZXIuCiAgIGZ1bmN0
aW9uIFN0cmluZ1N0cmVhbShzdHJpbmcsIHRhYlNpemUpIHsKQEAgLTIzMjAsMTAgKzMwMzMsMTEg
QEAgdmFyIENvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgdGhpcy5zdHJpbmcgPSBzdHJp
bmc7CiAgICAgdGhpcy50YWJTaXplID0gdGFiU2l6ZSB8fCA4OwogICB9CisKICAgU3RyaW5nU3Ry
ZWFtLnByb3RvdHlwZSA9IHsKICAgICBlb2w6IGZ1bmN0aW9uKCkge3JldHVybiB0aGlzLnBvcyA+
PSB0aGlzLnN0cmluZy5sZW5ndGg7fSwKICAgICBzb2w6IGZ1bmN0aW9uKCkge3JldHVybiB0aGlz
LnBvcyA9PSAwO30sCi0gICAgcGVlazogZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXMuc3RyaW5nLmNo
YXJBdCh0aGlzLnBvcyk7fSwKKyAgICBwZWVrOiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5zdHJp
bmcuY2hhckF0KHRoaXMucG9zKSB8fCB1bmRlZmluZWQ7fSwKICAgICBuZXh0OiBmdW5jdGlvbigp
IHsKICAgICAgIGlmICh0aGlzLnBvcyA8IHRoaXMuc3RyaW5nLmxlbmd0aCkKICAgICAgICAgcmV0
dXJuIHRoaXMuc3RyaW5nLmNoYXJBdCh0aGlzLnBvcysrKTsKQEAgLTIzNjEsNiArMzA3NSw3IEBA
IHZhciBDb2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgICB9CiAgICAgICB9IGVsc2Ug
ewogICAgICAgICB2YXIgbWF0Y2ggPSB0aGlzLnN0cmluZy5zbGljZSh0aGlzLnBvcykubWF0Y2go
cGF0dGVybik7CisgICAgICAgIGlmIChtYXRjaCAmJiBtYXRjaC5pbmRleCA+IDApIHJldHVybiBu
dWxsOwogICAgICAgICBpZiAobWF0Y2ggJiYgY29uc3VtZSAhPT0gZmFsc2UpIHRoaXMucG9zICs9
IG1hdGNoWzBdLmxlbmd0aDsKICAgICAgICAgcmV0dXJuIG1hdGNoOwogICAgICAgfQpAQCAtMjM2
OSwzOTIgKzMwODQsNTQ2IEBAIHZhciBDb2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICB9Owog
ICBDb2RlTWlycm9yLlN0cmluZ1N0cmVhbSA9IFN0cmluZ1N0cmVhbTsKIAotICBmdW5jdGlvbiBN
YXJrZWRUZXh0KGZyb20sIHRvLCBjbGFzc05hbWUsIG1hcmtlcikgewotICAgIHRoaXMuZnJvbSA9
IGZyb207IHRoaXMudG8gPSB0bzsgdGhpcy5zdHlsZSA9IGNsYXNzTmFtZTsgdGhpcy5tYXJrZXIg
PSBtYXJrZXI7CisgIC8vIFRFWFRNQVJLRVJTCisKKyAgZnVuY3Rpb24gVGV4dE1hcmtlcihjbSwg
dHlwZSkgeworICAgIHRoaXMubGluZXMgPSBbXTsKKyAgICB0aGlzLnR5cGUgPSB0eXBlOworICAg
IHRoaXMuY20gPSBjbTsKICAgfQotICBNYXJrZWRUZXh0LnByb3RvdHlwZSA9IHsKLSAgICBhdHRh
Y2g6IGZ1bmN0aW9uKGxpbmUpIHsgdGhpcy5tYXJrZXIuc2V0LnB1c2gobGluZSk7IH0sCi0gICAg
ZGV0YWNoOiBmdW5jdGlvbihsaW5lKSB7Ci0gICAgICB2YXIgaXggPSBpbmRleE9mKHRoaXMubWFy
a2VyLnNldCwgbGluZSk7Ci0gICAgICBpZiAoaXggPiAtMSkgdGhpcy5tYXJrZXIuc2V0LnNwbGlj
ZShpeCwgMSk7Ci0gICAgfSwKLSAgICBzcGxpdDogZnVuY3Rpb24ocG9zLCBsZW5CZWZvcmUpIHsK
LSAgICAgIGlmICh0aGlzLnRvIDw9IHBvcyAmJiB0aGlzLnRvICE9IG51bGwpIHJldHVybiBudWxs
OwotICAgICAgdmFyIGZyb20gPSB0aGlzLmZyb20gPCBwb3MgfHwgdGhpcy5mcm9tID09IG51bGwg
PyBudWxsIDogdGhpcy5mcm9tIC0gcG9zICsgbGVuQmVmb3JlOwotICAgICAgdmFyIHRvID0gdGhp
cy50byA9PSBudWxsID8gbnVsbCA6IHRoaXMudG8gLSBwb3MgKyBsZW5CZWZvcmU7Ci0gICAgICBy
ZXR1cm4gbmV3IE1hcmtlZFRleHQoZnJvbSwgdG8sIHRoaXMuc3R5bGUsIHRoaXMubWFya2VyKTsK
LSAgICB9LAotICAgIGR1cDogZnVuY3Rpb24oKSB7IHJldHVybiBuZXcgTWFya2VkVGV4dChudWxs
LCBudWxsLCB0aGlzLnN0eWxlLCB0aGlzLm1hcmtlcik7IH0sCi0gICAgY2xpcFRvOiBmdW5jdGlv
bihmcm9tT3BlbiwgZnJvbSwgdG9PcGVuLCB0bywgZGlmZikgewotICAgICAgaWYgKGZyb21PcGVu
ICYmIHRvID4gdGhpcy5mcm9tICYmICh0byA8IHRoaXMudG8gfHwgdGhpcy50byA9PSBudWxsKSkK
LSAgICAgICAgdGhpcy5mcm9tID0gbnVsbDsKLSAgICAgIGVsc2UgaWYgKHRoaXMuZnJvbSAhPSBu
dWxsICYmIHRoaXMuZnJvbSA+PSBmcm9tKQotICAgICAgICB0aGlzLmZyb20gPSBNYXRoLm1heCh0
bywgdGhpcy5mcm9tKSArIGRpZmY7Ci0gICAgICBpZiAodG9PcGVuICYmIChmcm9tIDwgdGhpcy50
byB8fCB0aGlzLnRvID09IG51bGwpICYmIChmcm9tID4gdGhpcy5mcm9tIHx8IHRoaXMuZnJvbSA9
PSBudWxsKSkKLSAgICAgICAgdGhpcy50byA9IG51bGw7Ci0gICAgICBlbHNlIGlmICh0aGlzLnRv
ICE9IG51bGwgJiYgdGhpcy50byA+IGZyb20pCi0gICAgICAgIHRoaXMudG8gPSB0byA8IHRoaXMu
dG8gPyB0aGlzLnRvICsgZGlmZiA6IGZyb207Ci0gICAgfSwKLSAgICBpc0RlYWQ6IGZ1bmN0aW9u
KCkgeyByZXR1cm4gdGhpcy5mcm9tICE9IG51bGwgJiYgdGhpcy50byAhPSBudWxsICYmIHRoaXMu
ZnJvbSA+PSB0aGlzLnRvOyB9LAotICAgIHNhbWVTZXQ6IGZ1bmN0aW9uKHgpIHsgcmV0dXJuIHRo
aXMubWFya2VyID09IHgubWFya2VyOyB9CisKKyAgVGV4dE1hcmtlci5wcm90b3R5cGUuY2xlYXIg
PSBmdW5jdGlvbigpIHsKKyAgICBpZiAodGhpcy5leHBsaWNpdGx5Q2xlYXJlZCkgcmV0dXJuOwor
ICAgIHN0YXJ0T3BlcmF0aW9uKHRoaXMuY20pOworICAgIHZhciBtaW4gPSBudWxsLCBtYXggPSBu
dWxsOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5saW5lcy5sZW5ndGg7ICsraSkgewor
ICAgICAgdmFyIGxpbmUgPSB0aGlzLmxpbmVzW2ldOworICAgICAgdmFyIHNwYW4gPSBnZXRNYXJr
ZWRTcGFuRm9yKGxpbmUubWFya2VkU3BhbnMsIHRoaXMpOworICAgICAgaWYgKHNwYW4udG8gIT0g
bnVsbCkgbWF4ID0gbGluZU5vKGxpbmUpOworICAgICAgbGluZS5tYXJrZWRTcGFucyA9IHJlbW92
ZU1hcmtlZFNwYW4obGluZS5tYXJrZWRTcGFucywgc3Bhbik7CisgICAgICBpZiAoc3Bhbi5mcm9t
ICE9IG51bGwpCisgICAgICAgIG1pbiA9IGxpbmVObyhsaW5lKTsKKyAgICAgIGVsc2UgaWYgKHRo
aXMuY29sbGFwc2VkICYmICFsaW5lSXNIaWRkZW4obGluZSkpCisgICAgICAgIHVwZGF0ZUxpbmVI
ZWlnaHQobGluZSwgdGV4dEhlaWdodCh0aGlzLmNtLmRpc3BsYXkpKTsKKyAgICB9CisgICAgaWYg
KG1pbiAhPSBudWxsKSByZWdDaGFuZ2UodGhpcy5jbSwgbWluLCBtYXggKyAxKTsKKyAgICB0aGlz
LmxpbmVzLmxlbmd0aCA9IDA7CisgICAgdGhpcy5leHBsaWNpdGx5Q2xlYXJlZCA9IHRydWU7Cisg
ICAgaWYgKHRoaXMuY29sbGFwc2VkICYmIHRoaXMuY20udmlldy5jYW50RWRpdCkgeworICAgICAg
dGhpcy5jbS52aWV3LmNhbnRFZGl0ID0gZmFsc2U7CisgICAgICByZUNoZWNrU2VsZWN0aW9uKHRo
aXMuY20pOworICAgIH0KKyAgICBlbmRPcGVyYXRpb24odGhpcy5jbSk7CisgICAgc2lnbmFsTGF0
ZXIodGhpcy5jbSwgdGhpcywgImNsZWFyIik7CiAgIH07CiAKLSAgZnVuY3Rpb24gQm9va21hcmso
cG9zKSB7Ci0gICAgdGhpcy5mcm9tID0gcG9zOyB0aGlzLnRvID0gcG9zOyB0aGlzLmxpbmUgPSBu
dWxsOwotICB9Ci0gIEJvb2ttYXJrLnByb3RvdHlwZSA9IHsKLSAgICBhdHRhY2g6IGZ1bmN0aW9u
KGxpbmUpIHsgdGhpcy5saW5lID0gbGluZTsgfSwKLSAgICBkZXRhY2g6IGZ1bmN0aW9uKGxpbmUp
IHsgaWYgKHRoaXMubGluZSA9PSBsaW5lKSB0aGlzLmxpbmUgPSBudWxsOyB9LAotICAgIHNwbGl0
OiBmdW5jdGlvbihwb3MsIGxlbkJlZm9yZSkgewotICAgICAgaWYgKHBvcyA8IHRoaXMuZnJvbSkg
ewotICAgICAgICB0aGlzLmZyb20gPSB0aGlzLnRvID0gKHRoaXMuZnJvbSAtIHBvcykgKyBsZW5C
ZWZvcmU7Ci0gICAgICAgIHJldHVybiB0aGlzOwotICAgICAgfQotICAgIH0sCi0gICAgaXNEZWFk
OiBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMuZnJvbSA+IHRoaXMudG87IH0sCi0gICAgY2xpcFRv
OiBmdW5jdGlvbihmcm9tT3BlbiwgZnJvbSwgdG9PcGVuLCB0bywgZGlmZikgewotICAgICAgaWYg
KChmcm9tT3BlbiB8fCBmcm9tIDwgdGhpcy5mcm9tKSAmJiAodG9PcGVuIHx8IHRvID4gdGhpcy50
bykpIHsKLSAgICAgICAgdGhpcy5mcm9tID0gMDsgdGhpcy50byA9IC0xOwotICAgICAgfSBlbHNl
IGlmICh0aGlzLmZyb20gPiBmcm9tKSB7Ci0gICAgICAgIHRoaXMuZnJvbSA9IHRoaXMudG8gPSBN
YXRoLm1heCh0bywgdGhpcy5mcm9tKSArIGRpZmY7Ci0gICAgICB9Ci0gICAgfSwKLSAgICBzYW1l
U2V0OiBmdW5jdGlvbih4KSB7IHJldHVybiBmYWxzZTsgfSwKLSAgICBmaW5kOiBmdW5jdGlvbigp
IHsKLSAgICAgIGlmICghdGhpcy5saW5lIHx8ICF0aGlzLmxpbmUucGFyZW50KSByZXR1cm4gbnVs
bDsKLSAgICAgIHJldHVybiB7bGluZTogbGluZU5vKHRoaXMubGluZSksIGNoOiB0aGlzLmZyb219
OwotICAgIH0sCi0gICAgY2xlYXI6IGZ1bmN0aW9uKCkgewotICAgICAgaWYgKHRoaXMubGluZSkg
ewotICAgICAgICB2YXIgZm91bmQgPSBpbmRleE9mKHRoaXMubGluZS5tYXJrZWQsIHRoaXMpOwot
ICAgICAgICBpZiAoZm91bmQgIT0gLTEpIHRoaXMubGluZS5tYXJrZWQuc3BsaWNlKGZvdW5kLCAx
KTsKLSAgICAgICAgdGhpcy5saW5lID0gbnVsbDsKKyAgVGV4dE1hcmtlci5wcm90b3R5cGUuZmlu
ZCA9IGZ1bmN0aW9uKCkgeworICAgIHZhciBmcm9tLCB0bzsKKyAgICBmb3IgKHZhciBpID0gMDsg
aSA8IHRoaXMubGluZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgIHZhciBsaW5lID0gdGhpcy5saW5l
c1tpXTsKKyAgICAgIHZhciBzcGFuID0gZ2V0TWFya2VkU3BhbkZvcihsaW5lLm1hcmtlZFNwYW5z
LCB0aGlzKTsKKyAgICAgIGlmIChzcGFuLmZyb20gIT0gbnVsbCB8fCBzcGFuLnRvICE9IG51bGwp
IHsKKyAgICAgICAgdmFyIGZvdW5kID0gbGluZU5vKGxpbmUpOworICAgICAgICBpZiAoc3Bhbi5m
cm9tICE9IG51bGwpIGZyb20gPSB7bGluZTogZm91bmQsIGNoOiBzcGFuLmZyb219OworICAgICAg
ICBpZiAoc3Bhbi50byAhPSBudWxsKSB0byA9IHtsaW5lOiBmb3VuZCwgY2g6IHNwYW4udG99Owog
ICAgICAgfQogICAgIH0KKyAgICBpZiAodGhpcy50eXBlID09ICJib29rbWFyayIpIHJldHVybiBm
cm9tOworICAgIHJldHVybiBmcm9tICYmIHtmcm9tOiBmcm9tLCB0bzogdG99OwogICB9OwogCi0g
IC8vIFdoZW4gbWVhc3VyaW5nIHRoZSBwb3NpdGlvbiBvZiB0aGUgZW5kIG9mIGEgbGluZSwgZGlm
ZmVyZW50Ci0gIC8vIGJyb3dzZXJzIHJlcXVpcmUgZGlmZmVyZW50IGFwcHJvYWNoZXMuIElmIGFu
IGVtcHR5IHNwYW4gaXMgYWRkZWQsCi0gIC8vIG1hbnkgYnJvd3NlcnMgcmVwb3J0IGJvZ3VzIG9m
ZnNldHMuIE9mIHRob3NlLCBzb21lIChXZWJraXQsCi0gIC8vIHJlY2VudCBJRSkgd2lsbCBhY2Nl
cHQgYSBzcGFjZSB3aXRob3V0IG1vdmluZyB0aGUgd2hvbGUgc3BhbiB0bwotICAvLyB0aGUgbmV4
dCBsaW5lIHdoZW4gd3JhcHBpbmcgaXQsIG90aGVycyB3b3JrIHdpdGggYSB6ZXJvLXdpZHRoCi0g
IC8vIHNwYWNlLgotICB2YXIgZW9sU3BhbkNvbnRlbnQgPSAiICI7Ci0gIGlmIChnZWNrbyB8fCAo
aWUgJiYgIWllX2x0OCkpIGVvbFNwYW5Db250ZW50ID0gIlx1MjAwYiI7Ci0gIGVsc2UgaWYgKG9w
ZXJhKSBlb2xTcGFuQ29udGVudCA9ICIiOworICBmdW5jdGlvbiBtYXJrVGV4dChjbSwgZnJvbSwg
dG8sIG9wdGlvbnMsIHR5cGUpIHsKKyAgICB2YXIgZG9jID0gY20udmlldy5kb2M7CisgICAgdmFy
IG1hcmtlciA9IG5ldyBUZXh0TWFya2VyKGNtLCB0eXBlKTsKKyAgICBpZiAodHlwZSA9PSAicmFu
Z2UiICYmICFwb3NMZXNzKGZyb20sIHRvKSkgcmV0dXJuIG1hcmtlcjsKKyAgICBpZiAob3B0aW9u
cykgZm9yICh2YXIgb3B0IGluIG9wdGlvbnMpIGlmIChvcHRpb25zLmhhc093blByb3BlcnR5KG9w
dCkpCisgICAgICBtYXJrZXJbb3B0XSA9IG9wdGlvbnNbb3B0XTsKKyAgICBpZiAobWFya2VyLnJl
cGxhY2VkV2l0aCkgeworICAgICAgbWFya2VyLmNvbGxhcHNlZCA9IHRydWU7CisgICAgICBtYXJr
ZXIucmVwbGFjZWRXaXRoID0gZWx0KCJzcGFuIiwgW21hcmtlci5yZXBsYWNlZFdpdGhdLCAiQ29k
ZU1pcnJvci13aWRnZXQiKTsKKyAgICB9CisgICAgaWYgKG1hcmtlci5jb2xsYXBzZWQpIHNhd0Nv
bGxhcHNlZFNwYW5zID0gdHJ1ZTsKKworICAgIHZhciBjdXJMaW5lID0gZnJvbS5saW5lLCBzaXpl
ID0gMCwgY29sbGFwc2VkQXRTdGFydCwgY29sbGFwc2VkQXRFbmQ7CisgICAgZG9jLml0ZXIoY3Vy
TGluZSwgdG8ubGluZSArIDEsIGZ1bmN0aW9uKGxpbmUpIHsKKyAgICAgIHZhciBzcGFuID0ge2Zy
b206IG51bGwsIHRvOiBudWxsLCBtYXJrZXI6IG1hcmtlcn07CisgICAgICBzaXplICs9IGxpbmUu
dGV4dC5sZW5ndGg7CisgICAgICBpZiAoY3VyTGluZSA9PSBmcm9tLmxpbmUpIHtzcGFuLmZyb20g
PSBmcm9tLmNoOyBzaXplIC09IGZyb20uY2g7fQorICAgICAgaWYgKGN1ckxpbmUgPT0gdG8ubGlu
ZSkge3NwYW4udG8gPSB0by5jaDsgc2l6ZSAtPSBsaW5lLnRleHQubGVuZ3RoIC0gdG8uY2g7fQor
ICAgICAgaWYgKG1hcmtlci5jb2xsYXBzZWQpIHsKKyAgICAgICAgaWYgKGN1ckxpbmUgPT0gdG8u
bGluZSkgY29sbGFwc2VkQXRFbmQgPSBjb2xsYXBzZWRTcGFuQXQobGluZSwgdG8uY2gpOworICAg
ICAgICBpZiAoY3VyTGluZSA9PSBmcm9tLmxpbmUpIGNvbGxhcHNlZEF0U3RhcnQgPSBjb2xsYXBz
ZWRTcGFuQXQobGluZSwgZnJvbS5jaCk7CisgICAgICAgIGVsc2UgdXBkYXRlTGluZUhlaWdodChs
aW5lLCAwKTsKKyAgICAgIH0KKyAgICAgIGFkZE1hcmtlZFNwYW4obGluZSwgc3Bhbik7CisgICAg
ICBpZiAobWFya2VyLmNvbGxhcHNlZCAmJiBjdXJMaW5lID09IGZyb20ubGluZSAmJiBsaW5lSXNI
aWRkZW4obGluZSkpCisgICAgICAgIHVwZGF0ZUxpbmVIZWlnaHQobGluZSwgMCk7CisgICAgICAr
K2N1ckxpbmU7CisgICAgfSk7CisKKyAgICBpZiAobWFya2VyLnJlYWRPbmx5KSB7CisgICAgICBz
YXdSZWFkT25seVNwYW5zID0gdHJ1ZTsKKyAgICAgIGlmIChjbS52aWV3Lmhpc3RvcnkuZG9uZS5s
ZW5ndGggfHwgY20udmlldy5oaXN0b3J5LnVuZG9uZS5sZW5ndGgpCisgICAgICAgIGNtLmNsZWFy
SGlzdG9yeSgpOworICAgIH0KKyAgICBpZiAobWFya2VyLmNvbGxhcHNlZCkgeworICAgICAgaWYg
KGNvbGxhcHNlZEF0U3RhcnQgIT0gY29sbGFwc2VkQXRFbmQpCisgICAgICAgIHRocm93IG5ldyBF
cnJvcigiSW5zZXJ0aW5nIGNvbGxhcHNlZCBtYXJrZXIgb3ZlcmxhcHBpbmcgYW4gZXhpc3Rpbmcg
b25lIik7CisgICAgICBtYXJrZXIuc2l6ZSA9IHNpemU7CisgICAgICBtYXJrZXIuYXRvbWljID0g
dHJ1ZTsKKyAgICB9CisgICAgaWYgKG1hcmtlci5jbGFzc05hbWUgfHwgbWFya2VyLnN0YXJ0U3R5
bGUgfHwgbWFya2VyLmVuZFN0eWxlIHx8IG1hcmtlci5jb2xsYXBzZWQpCisgICAgICByZWdDaGFu
Z2UoY20sIGZyb20ubGluZSwgdG8ubGluZSArIDEpOworICAgIGlmIChtYXJrZXIuYXRvbWljKSBy
ZUNoZWNrU2VsZWN0aW9uKGNtKTsKKyAgICByZXR1cm4gbWFya2VyOworICB9CiAKLSAgLy8gTGlu
ZSBvYmplY3RzLiBUaGVzZSBob2xkIHN0YXRlIHJlbGF0ZWQgdG8gYSBsaW5lLCBpbmNsdWRpbmcK
LSAgLy8gaGlnaGxpZ2h0aW5nIGluZm8gKHRoZSBzdHlsZXMgYXJyYXkpLgotICBmdW5jdGlvbiBM
aW5lKHRleHQsIHN0eWxlcykgewotICAgIHRoaXMuc3R5bGVzID0gc3R5bGVzIHx8IFt0ZXh0LCBu
dWxsXTsKLSAgICB0aGlzLnRleHQgPSB0ZXh0OwotICAgIHRoaXMuaGVpZ2h0ID0gMTsKLSAgfQot
ICBMaW5lLmluaGVyaXRNYXJrcyA9IGZ1bmN0aW9uKHRleHQsIG9yaWcpIHsKLSAgICB2YXIgbG4g
PSBuZXcgTGluZSh0ZXh0KSwgbWsgPSBvcmlnICYmIG9yaWcubWFya2VkOwotICAgIGlmIChtaykg
ewotICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtay5sZW5ndGg7ICsraSkgewotICAgICAgICBp
ZiAobWtbaV0udG8gPT0gbnVsbCAmJiBta1tpXS5zdHlsZSkgewotICAgICAgICAgIHZhciBuZXdt
ayA9IGxuLm1hcmtlZCB8fCAobG4ubWFya2VkID0gW10pLCBtYXJrID0gbWtbaV07Ci0gICAgICAg
ICAgdmFyIG5tYXJrID0gbWFyay5kdXAoKTsgbmV3bWsucHVzaChubWFyayk7IG5tYXJrLmF0dGFj
aChsbik7Ci0gICAgICAgIH0KKyAgLy8gVEVYVE1BUktFUiBTUEFOUworCisgIGZ1bmN0aW9uIGdl
dE1hcmtlZFNwYW5Gb3Ioc3BhbnMsIG1hcmtlcikgeworICAgIGlmIChzcGFucykgZm9yICh2YXIg
aSA9IDA7IGkgPCBzcGFucy5sZW5ndGg7ICsraSkgeworICAgICAgdmFyIHNwYW4gPSBzcGFuc1tp
XTsKKyAgICAgIGlmIChzcGFuLm1hcmtlciA9PSBtYXJrZXIpIHJldHVybiBzcGFuOworICAgIH0K
KyAgfQorICBmdW5jdGlvbiByZW1vdmVNYXJrZWRTcGFuKHNwYW5zLCBzcGFuKSB7CisgICAgZm9y
ICh2YXIgciwgaSA9IDA7IGkgPCBzcGFucy5sZW5ndGg7ICsraSkKKyAgICAgIGlmIChzcGFuc1tp
XSAhPSBzcGFuKSAociB8fCAociA9IFtdKSkucHVzaChzcGFuc1tpXSk7CisgICAgcmV0dXJuIHI7
CisgIH0KKyAgZnVuY3Rpb24gYWRkTWFya2VkU3BhbihsaW5lLCBzcGFuKSB7CisgICAgbGluZS5t
YXJrZWRTcGFucyA9IGxpbmUubWFya2VkU3BhbnMgPyBsaW5lLm1hcmtlZFNwYW5zLmNvbmNhdChb
c3Bhbl0pIDogW3NwYW5dOworICAgIHNwYW4ubWFya2VyLmxpbmVzLnB1c2gobGluZSk7CisgIH0K
KworICBmdW5jdGlvbiBtYXJrZWRTcGFuc0JlZm9yZShvbGQsIHN0YXJ0Q2gpIHsKKyAgICBpZiAo
b2xkKSBmb3IgKHZhciBpID0gMCwgbnc7IGkgPCBvbGQubGVuZ3RoOyArK2kpIHsKKyAgICAgIHZh
ciBzcGFuID0gb2xkW2ldLCBtYXJrZXIgPSBzcGFuLm1hcmtlcjsKKyAgICAgIHZhciBzdGFydHNC
ZWZvcmUgPSBzcGFuLmZyb20gPT0gbnVsbCB8fCAobWFya2VyLmluY2x1c2l2ZUxlZnQgPyBzcGFu
LmZyb20gPD0gc3RhcnRDaCA6IHNwYW4uZnJvbSA8IHN0YXJ0Q2gpOworICAgICAgaWYgKHN0YXJ0
c0JlZm9yZSB8fCBtYXJrZXIudHlwZSA9PSAiYm9va21hcmsiICYmIHNwYW4uZnJvbSA9PSBzdGFy
dENoKSB7CisgICAgICAgIHZhciBlbmRzQWZ0ZXIgPSBzcGFuLnRvID09IG51bGwgfHwgKG1hcmtl
ci5pbmNsdXNpdmVSaWdodCA/IHNwYW4udG8gPj0gc3RhcnRDaCA6IHNwYW4udG8gPiBzdGFydENo
KTsKKyAgICAgICAgKG53IHx8IChudyA9IFtdKSkucHVzaCh7ZnJvbTogc3Bhbi5mcm9tLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bzogZW5kc0FmdGVyID8gbnVsbCA6IHNwYW4u
dG8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtlcjogbWFya2VyfSk7CiAg
ICAgICB9CiAgICAgfQotICAgIHJldHVybiBsbjsKLSAgfTsKLSAgTGluZS5wcm90b3R5cGUgPSB7
Ci0gICAgLy8gUmVwbGFjZSBhIHBpZWNlIG9mIGEgbGluZSwga2VlcGluZyB0aGUgc3R5bGVzIGFy
b3VuZCBpdCBpbnRhY3QuCi0gICAgcmVwbGFjZTogZnVuY3Rpb24oZnJvbSwgdG9fLCB0ZXh0KSB7
Ci0gICAgICB2YXIgc3QgPSBbXSwgbWsgPSB0aGlzLm1hcmtlZCwgdG8gPSB0b18gPT0gbnVsbCA/
IHRoaXMudGV4dC5sZW5ndGggOiB0b187Ci0gICAgICBjb3B5U3R5bGVzKDAsIGZyb20sIHRoaXMu
c3R5bGVzLCBzdCk7Ci0gICAgICBpZiAodGV4dCkgc3QucHVzaCh0ZXh0LCBudWxsKTsKLSAgICAg
IGNvcHlTdHlsZXModG8sIHRoaXMudGV4dC5sZW5ndGgsIHRoaXMuc3R5bGVzLCBzdCk7Ci0gICAg
ICB0aGlzLnN0eWxlcyA9IHN0OwotICAgICAgdGhpcy50ZXh0ID0gdGhpcy50ZXh0LnNsaWNlKDAs
IGZyb20pICsgdGV4dCArIHRoaXMudGV4dC5zbGljZSh0byk7Ci0gICAgICB0aGlzLnN0YXRlQWZ0
ZXIgPSBudWxsOwotICAgICAgaWYgKG1rKSB7Ci0gICAgICAgIHZhciBkaWZmID0gdGV4dC5sZW5n
dGggLSAodG8gLSBmcm9tKTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtay5sZW5ndGg7
ICsraSkgewotICAgICAgICAgIHZhciBtYXJrID0gbWtbaV07Ci0gICAgICAgICAgbWFyay5jbGlw
VG8oZnJvbSA9PSBudWxsLCBmcm9tIHx8IDAsIHRvXyA9PSBudWxsLCB0bywgZGlmZik7Ci0gICAg
ICAgICAgaWYgKG1hcmsuaXNEZWFkKCkpIHttYXJrLmRldGFjaCh0aGlzKTsgbWsuc3BsaWNlKGkt
LSwgMSk7fQotICAgICAgICB9CisgICAgcmV0dXJuIG53OworICB9CisKKyAgZnVuY3Rpb24gbWFy
a2VkU3BhbnNBZnRlcihvbGQsIHN0YXJ0Q2gsIGVuZENoKSB7CisgICAgaWYgKG9sZCkgZm9yICh2
YXIgaSA9IDAsIG53OyBpIDwgb2xkLmxlbmd0aDsgKytpKSB7CisgICAgICB2YXIgc3BhbiA9IG9s
ZFtpXSwgbWFya2VyID0gc3Bhbi5tYXJrZXI7CisgICAgICB2YXIgZW5kc0FmdGVyID0gc3Bhbi50
byA9PSBudWxsIHx8IChtYXJrZXIuaW5jbHVzaXZlUmlnaHQgPyBzcGFuLnRvID49IGVuZENoIDog
c3Bhbi50byA+IGVuZENoKTsKKyAgICAgIGlmIChlbmRzQWZ0ZXIgfHwgbWFya2VyLnR5cGUgPT0g
ImJvb2ttYXJrIiAmJiBzcGFuLmZyb20gPT0gZW5kQ2ggJiYgc3Bhbi5mcm9tICE9IHN0YXJ0Q2gp
IHsKKyAgICAgICAgdmFyIHN0YXJ0c0JlZm9yZSA9IHNwYW4uZnJvbSA9PSBudWxsIHx8IChtYXJr
ZXIuaW5jbHVzaXZlTGVmdCA/IHNwYW4uZnJvbSA8PSBlbmRDaCA6IHNwYW4uZnJvbSA8IGVuZENo
KTsKKyAgICAgICAgKG53IHx8IChudyA9IFtdKSkucHVzaCh7ZnJvbTogc3RhcnRzQmVmb3JlID8g
bnVsbCA6IHNwYW4uZnJvbSAtIGVuZENoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0bzogc3Bhbi50byA9PSBudWxsID8gbnVsbCA6IHNwYW4udG8gLSBlbmRDaCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VyOiBtYXJrZXJ9KTsKICAgICAgIH0KLSAgICB9
LAotICAgIC8vIFNwbGl0IGEgcGFydCBvZmYgYSBsaW5lLCBrZWVwaW5nIHN0eWxlcyBhbmQgbWFy
a2VycyBpbnRhY3QuCi0gICAgc3BsaXQ6IGZ1bmN0aW9uKHBvcywgdGV4dEJlZm9yZSkgewotICAg
ICAgdmFyIHN0ID0gW3RleHRCZWZvcmUsIG51bGxdLCBtayA9IHRoaXMubWFya2VkOwotICAgICAg
Y29weVN0eWxlcyhwb3MsIHRoaXMudGV4dC5sZW5ndGgsIHRoaXMuc3R5bGVzLCBzdCk7Ci0gICAg
ICB2YXIgdGFrZW4gPSBuZXcgTGluZSh0ZXh0QmVmb3JlICsgdGhpcy50ZXh0LnNsaWNlKHBvcyks
IHN0KTsKLSAgICAgIGlmIChtaykgewotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1rLmxl
bmd0aDsgKytpKSB7Ci0gICAgICAgICAgdmFyIG1hcmsgPSBta1tpXTsKLSAgICAgICAgICB2YXIg
bmV3bWFyayA9IG1hcmsuc3BsaXQocG9zLCB0ZXh0QmVmb3JlLmxlbmd0aCk7Ci0gICAgICAgICAg
aWYgKG5ld21hcmspIHsKLSAgICAgICAgICAgIGlmICghdGFrZW4ubWFya2VkKSB0YWtlbi5tYXJr
ZWQgPSBbXTsKLSAgICAgICAgICAgIHRha2VuLm1hcmtlZC5wdXNoKG5ld21hcmspOyBuZXdtYXJr
LmF0dGFjaCh0YWtlbik7Ci0gICAgICAgICAgICBpZiAobmV3bWFyayA9PSBtYXJrKSBtay5zcGxp
Y2UoaS0tLCAxKTsKLSAgICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBudzsKKyAgfQorCisg
IGZ1bmN0aW9uIHVwZGF0ZU1hcmtlZFNwYW5zKG9sZEZpcnN0LCBvbGRMYXN0LCBzdGFydENoLCBl
bmRDaCwgbmV3VGV4dCkgeworICAgIGlmICghb2xkRmlyc3QgJiYgIW9sZExhc3QpIHJldHVybiBu
ZXdUZXh0OworICAgIC8vIEdldCB0aGUgc3BhbnMgdGhhdCAnc3RpY2sgb3V0JyBvbiBib3RoIHNp
ZGVzCisgICAgdmFyIGZpcnN0ID0gbWFya2VkU3BhbnNCZWZvcmUob2xkRmlyc3QsIHN0YXJ0Q2gp
OworICAgIHZhciBsYXN0ID0gbWFya2VkU3BhbnNBZnRlcihvbGRMYXN0LCBzdGFydENoLCBlbmRD
aCk7CisKKyAgICAvLyBOZXh0LCBtZXJnZSB0aG9zZSB0d28gZW5kcworICAgIHZhciBzYW1lTGlu
ZSA9IG5ld1RleHQubGVuZ3RoID09IDEsIG9mZnNldCA9IGxzdChuZXdUZXh0KS5sZW5ndGggKyAo
c2FtZUxpbmUgPyBzdGFydENoIDogMCk7CisgICAgaWYgKGZpcnN0KSB7CisgICAgICAvLyBGaXgg
dXAgLnRvIHByb3BlcnRpZXMgb2YgZmlyc3QKKyAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmly
c3QubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgdmFyIHNwYW4gPSBmaXJzdFtpXTsKKyAgICAgICAg
aWYgKHNwYW4udG8gPT0gbnVsbCkgeworICAgICAgICAgIHZhciBmb3VuZCA9IGdldE1hcmtlZFNw
YW5Gb3IobGFzdCwgc3Bhbi5tYXJrZXIpOworICAgICAgICAgIGlmICghZm91bmQpIHNwYW4udG8g
PSBzdGFydENoOworICAgICAgICAgIGVsc2UgaWYgKHNhbWVMaW5lKSBzcGFuLnRvID0gZm91bmQu
dG8gPT0gbnVsbCA/IG51bGwgOiBmb3VuZC50byArIG9mZnNldDsKICAgICAgICAgfQogICAgICAg
fQotICAgICAgcmV0dXJuIHRha2VuOwotICAgIH0sCi0gICAgYXBwZW5kOiBmdW5jdGlvbihsaW5l
KSB7Ci0gICAgICB2YXIgbXlsZW4gPSB0aGlzLnRleHQubGVuZ3RoLCBtayA9IGxpbmUubWFya2Vk
LCBteW1rID0gdGhpcy5tYXJrZWQ7Ci0gICAgICB0aGlzLnRleHQgKz0gbGluZS50ZXh0OwotICAg
ICAgY29weVN0eWxlcygwLCBsaW5lLnRleHQubGVuZ3RoLCBsaW5lLnN0eWxlcywgdGhpcy5zdHls
ZXMpOwotICAgICAgaWYgKG15bWspIHsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBteW1r
Lmxlbmd0aDsgKytpKQotICAgICAgICAgIGlmIChteW1rW2ldLnRvID09IG51bGwpIG15bWtbaV0u
dG8gPSBteWxlbjsKLSAgICAgIH0KLSAgICAgIGlmIChtayAmJiBtay5sZW5ndGgpIHsKLSAgICAg
ICAgaWYgKCFteW1rKSB0aGlzLm1hcmtlZCA9IG15bWsgPSBbXTsKLSAgICAgICAgb3V0ZXI6IGZv
ciAodmFyIGkgPSAwOyBpIDwgbWsubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICB2YXIgbWFyayA9
IG1rW2ldOwotICAgICAgICAgIGlmICghbWFyay5mcm9tKSB7Ci0gICAgICAgICAgICBmb3IgKHZh
ciBqID0gMDsgaiA8IG15bWsubGVuZ3RoOyArK2opIHsKLSAgICAgICAgICAgICAgdmFyIG15bWFy
ayA9IG15bWtbal07Ci0gICAgICAgICAgICAgIGlmIChteW1hcmsudG8gPT0gbXlsZW4gJiYgbXlt
YXJrLnNhbWVTZXQobWFyaykpIHsKLSAgICAgICAgICAgICAgICBteW1hcmsudG8gPSBtYXJrLnRv
ID09IG51bGwgPyBudWxsIDogbWFyay50byArIG15bGVuOwotICAgICAgICAgICAgICAgIGlmICht
eW1hcmsuaXNEZWFkKCkpIHsKLSAgICAgICAgICAgICAgICAgIG15bWFyay5kZXRhY2godGhpcyk7
Ci0gICAgICAgICAgICAgICAgICBtay5zcGxpY2UoaS0tLCAxKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgY29udGludWUgb3V0ZXI7Ci0gICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KKyAgICB9CisgICAgaWYgKGxhc3QpIHsKKyAgICAgIC8vIEZpeCB1cCAuZnJvbSBp
biBsYXN0IChvciBtb3ZlIHRoZW0gaW50byBmaXJzdCBpbiBjYXNlIG9mIHNhbWVMaW5lKQorICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsYXN0Lmxlbmd0aDsgKytpKSB7CisgICAgICAgIHZhciBz
cGFuID0gbGFzdFtpXTsKKyAgICAgICAgaWYgKHNwYW4udG8gIT0gbnVsbCkgc3Bhbi50byArPSBv
ZmZzZXQ7CisgICAgICAgIGlmIChzcGFuLmZyb20gPT0gbnVsbCkgeworICAgICAgICAgIHZhciBm
b3VuZCA9IGdldE1hcmtlZFNwYW5Gb3IoZmlyc3QsIHNwYW4ubWFya2VyKTsKKyAgICAgICAgICBp
ZiAoIWZvdW5kKSB7CisgICAgICAgICAgICBzcGFuLmZyb20gPSBvZmZzZXQ7CisgICAgICAgICAg
ICBpZiAoc2FtZUxpbmUpIChmaXJzdCB8fCAoZmlyc3QgPSBbXSkpLnB1c2goc3Bhbik7CiAgICAg
ICAgICAgfQotICAgICAgICAgIG15bWsucHVzaChtYXJrKTsKLSAgICAgICAgICBtYXJrLmF0dGFj
aCh0aGlzKTsKLSAgICAgICAgICBtYXJrLmZyb20gKz0gbXlsZW47Ci0gICAgICAgICAgaWYgKG1h
cmsudG8gIT0gbnVsbCkgbWFyay50byArPSBteWxlbjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICBzcGFuLmZyb20gKz0gb2Zmc2V0OworICAgICAgICAgIGlmIChzYW1lTGluZSkgKGZpcnN0
IHx8IChmaXJzdCA9IFtdKSkucHVzaChzcGFuKTsKICAgICAgICAgfQogICAgICAgfQotICAgIH0s
Ci0gICAgZml4TWFya0VuZHM6IGZ1bmN0aW9uKG90aGVyKSB7Ci0gICAgICB2YXIgbWsgPSB0aGlz
Lm1hcmtlZCwgb21rID0gb3RoZXIubWFya2VkOwotICAgICAgaWYgKCFtaykgcmV0dXJuOwotICAg
ICAgb3V0ZXI6IGZvciAodmFyIGkgPSAwOyBpIDwgbWsubGVuZ3RoOyArK2kpIHsKLSAgICAgICAg
dmFyIG1hcmsgPSBta1tpXSwgY2xvc2UgPSBtYXJrLnRvID09IG51bGw7Ci0gICAgICAgIGlmIChj
bG9zZSAmJiBvbWspIHsKLSAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG9tay5sZW5ndGg7
ICsraikgewotICAgICAgICAgICAgdmFyIG9tID0gb21rW2pdOwotICAgICAgICAgICAgaWYgKCFv
bS5zYW1lU2V0KG1hcmspIHx8IG9tLmZyb20gIT0gbnVsbCkgY29udGludWU7Ci0gICAgICAgICAg
ICBpZiAobWFyay5mcm9tID09IHRoaXMudGV4dC5sZW5ndGggJiYgb20udG8gPT0gMCkgewotICAg
ICAgICAgICAgICBvbWsuc3BsaWNlKGosIDEpOwotICAgICAgICAgICAgICBtay5zcGxpY2UoaS0t
LCAxKTsKLSAgICAgICAgICAgICAgY29udGludWUgb3V0ZXI7Ci0gICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICBjbG9zZSA9IGZhbHNlOyBicmVhazsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGNsb3NlKSBtYXJrLnRvID0gdGhpcy50
ZXh0Lmxlbmd0aDsKKyAgICB9CisKKyAgICB2YXIgbmV3TWFya2VycyA9IFtuZXdITChuZXdUZXh0
WzBdLCBmaXJzdCldOworICAgIGlmICghc2FtZUxpbmUpIHsKKyAgICAgIC8vIEZpbGwgZ2FwIHdp
dGggd2hvbGUtbGluZS1zcGFucworICAgICAgdmFyIGdhcCA9IG5ld1RleHQubGVuZ3RoIC0gMiwg
Z2FwTWFya2VyczsKKyAgICAgIGlmIChnYXAgPiAwICYmIGZpcnN0KQorICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IGZpcnN0Lmxlbmd0aDsgKytpKQorICAgICAgICAgIGlmIChmaXJzdFtpXS50
byA9PSBudWxsKQorICAgICAgICAgICAgKGdhcE1hcmtlcnMgfHwgKGdhcE1hcmtlcnMgPSBbXSkp
LnB1c2goe2Zyb206IG51bGwsIHRvOiBudWxsLCBtYXJrZXI6IGZpcnN0W2ldLm1hcmtlcn0pOwor
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBnYXA7ICsraSkKKyAgICAgICAgbmV3TWFya2Vycy5w
dXNoKG5ld0hMKG5ld1RleHRbaSsxXSwgZ2FwTWFya2VycykpOworICAgICAgbmV3TWFya2Vycy5w
dXNoKG5ld0hMKGxzdChuZXdUZXh0KSwgbGFzdCkpOworICAgIH0KKyAgICByZXR1cm4gbmV3TWFy
a2VyczsKKyAgfQorCisgIGZ1bmN0aW9uIHJlbW92ZVJlYWRPbmx5UmFuZ2VzKGRvYywgZnJvbSwg
dG8pIHsKKyAgICB2YXIgbWFya2VycyA9IG51bGw7CisgICAgZG9jLml0ZXIoZnJvbS5saW5lLCB0
by5saW5lICsgMSwgZnVuY3Rpb24obGluZSkgeworICAgICAgaWYgKGxpbmUubWFya2VkU3BhbnMp
IGZvciAodmFyIGkgPSAwOyBpIDwgbGluZS5tYXJrZWRTcGFucy5sZW5ndGg7ICsraSkgeworICAg
ICAgICB2YXIgbWFyayA9IGxpbmUubWFya2VkU3BhbnNbaV0ubWFya2VyOworICAgICAgICBpZiAo
bWFyay5yZWFkT25seSAmJiAoIW1hcmtlcnMgfHwgaW5kZXhPZihtYXJrZXJzLCBtYXJrKSA9PSAt
MSkpCisgICAgICAgICAgKG1hcmtlcnMgfHwgKG1hcmtlcnMgPSBbXSkpLnB1c2gobWFyayk7CiAg
ICAgICB9Ci0gICAgfSwKLSAgICBmaXhNYXJrU3RhcnRzOiBmdW5jdGlvbigpIHsKLSAgICAgIHZh
ciBtayA9IHRoaXMubWFya2VkOwotICAgICAgaWYgKCFtaykgcmV0dXJuOwotICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBtay5sZW5ndGg7ICsraSkKLSAgICAgICAgaWYgKG1rW2ldLmZyb20gPT0g
bnVsbCkgbWtbaV0uZnJvbSA9IDA7Ci0gICAgfSwKLSAgICBhZGRNYXJrOiBmdW5jdGlvbihtYXJr
KSB7Ci0gICAgICBtYXJrLmF0dGFjaCh0aGlzKTsKLSAgICAgIGlmICh0aGlzLm1hcmtlZCA9PSBu
dWxsKSB0aGlzLm1hcmtlZCA9IFtdOwotICAgICAgdGhpcy5tYXJrZWQucHVzaChtYXJrKTsKLSAg
ICAgIHRoaXMubWFya2VkLnNvcnQoZnVuY3Rpb24oYSwgYil7cmV0dXJuIChhLmZyb20gfHwgMCkg
LSAoYi5mcm9tIHx8IDApO30pOwotICAgIH0sCi0gICAgLy8gUnVuIHRoZSBnaXZlbiBtb2RlJ3Mg
cGFyc2VyIG92ZXIgYSBsaW5lLCB1cGRhdGUgdGhlIHN0eWxlcwotICAgIC8vIGFycmF5LCB3aGlj
aCBjb250YWlucyBhbHRlcm5hdGluZyBmcmFnbWVudHMgb2YgdGV4dCBhbmQgQ1NTCi0gICAgLy8g
Y2xhc3Nlcy4KLSAgICBoaWdobGlnaHQ6IGZ1bmN0aW9uKG1vZGUsIHN0YXRlLCB0YWJTaXplKSB7
Ci0gICAgICB2YXIgc3RyZWFtID0gbmV3IFN0cmluZ1N0cmVhbSh0aGlzLnRleHQsIHRhYlNpemUp
LCBzdCA9IHRoaXMuc3R5bGVzLCBwb3MgPSAwOwotICAgICAgdmFyIGNoYW5nZWQgPSBmYWxzZSwg
Y3VyV29yZCA9IHN0WzBdLCBwcmV2V29yZDsKLSAgICAgIGlmICh0aGlzLnRleHQgPT0gIiIgJiYg
bW9kZS5ibGFua0xpbmUpIG1vZGUuYmxhbmtMaW5lKHN0YXRlKTsKLSAgICAgIHdoaWxlICghc3Ry
ZWFtLmVvbCgpKSB7Ci0gICAgICAgIHZhciBzdHlsZSA9IG1vZGUudG9rZW4oc3RyZWFtLCBzdGF0
ZSk7Ci0gICAgICAgIHZhciBzdWJzdHIgPSB0aGlzLnRleHQuc2xpY2Uoc3RyZWFtLnN0YXJ0LCBz
dHJlYW0ucG9zKTsKLSAgICAgICAgc3RyZWFtLnN0YXJ0ID0gc3RyZWFtLnBvczsKLSAgICAgICAg
aWYgKHBvcyAmJiBzdFtwb3MtMV0gPT0gc3R5bGUpCi0gICAgICAgICAgc3RbcG9zLTJdICs9IHN1
YnN0cjsKLSAgICAgICAgZWxzZSBpZiAoc3Vic3RyKSB7Ci0gICAgICAgICAgaWYgKCFjaGFuZ2Vk
ICYmIChzdFtwb3MrMV0gIT0gc3R5bGUgfHwgKHBvcyAmJiBzdFtwb3MtMl0gIT0gcHJldldvcmQp
KSkgY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgc3RbcG9zKytdID0gc3Vic3RyOyBzdFtwb3Mr
K10gPSBzdHlsZTsKLSAgICAgICAgICBwcmV2V29yZCA9IGN1cldvcmQ7IGN1cldvcmQgPSBzdFtw
b3NdOworICAgIH0pOworICAgIGlmICghbWFya2VycykgcmV0dXJuIG51bGw7CisgICAgdmFyIHBh
cnRzID0gW3tmcm9tOiBmcm9tLCB0bzogdG99XTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1h
cmtlcnMubGVuZ3RoOyArK2kpIHsKKyAgICAgIHZhciBtID0gbWFya2Vyc1tpXS5maW5kKCk7Cisg
ICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHBhcnRzLmxlbmd0aDsgKytqKSB7CisgICAgICAgIHZh
ciBwID0gcGFydHNbal07CisgICAgICAgIGlmICghcG9zTGVzcyhtLmZyb20sIHAudG8pIHx8IHBv
c0xlc3MobS50bywgcC5mcm9tKSkgY29udGludWU7CisgICAgICAgIHZhciBuZXdQYXJ0cyA9IFtq
LCAxXTsKKyAgICAgICAgaWYgKHBvc0xlc3MocC5mcm9tLCBtLmZyb20pKSBuZXdQYXJ0cy5wdXNo
KHtmcm9tOiBwLmZyb20sIHRvOiBtLmZyb219KTsKKyAgICAgICAgaWYgKHBvc0xlc3MobS50bywg
cC50bykpIG5ld1BhcnRzLnB1c2goe2Zyb206IG0udG8sIHRvOiBwLnRvfSk7CisgICAgICAgIHBh
cnRzLnNwbGljZS5hcHBseShwYXJ0cywgbmV3UGFydHMpOworICAgICAgICBqICs9IG5ld1BhcnRz
Lmxlbmd0aCAtIDE7CisgICAgICB9CisgICAgfQorICAgIHJldHVybiBwYXJ0czsKKyAgfQorCisg
IGZ1bmN0aW9uIGNvbGxhcHNlZFNwYW5BdChsaW5lLCBjaCkgeworICAgIHZhciBzcHMgPSBzYXdD
b2xsYXBzZWRTcGFucyAmJiBsaW5lLm1hcmtlZFNwYW5zLCBmb3VuZDsKKyAgICBpZiAoc3BzKSBm
b3IgKHZhciBzcCwgaSA9IDA7IGkgPCBzcHMubGVuZ3RoOyArK2kpIHsKKyAgICAgIHNwID0gc3Bz
W2ldOworICAgICAgaWYgKCFzcC5tYXJrZXIuY29sbGFwc2VkKSBjb250aW51ZTsKKyAgICAgIGlm
ICgoc3AuZnJvbSA9PSBudWxsIHx8IHNwLmZyb20gPCBjaCkgJiYKKyAgICAgICAgICAoc3AudG8g
PT0gbnVsbCB8fCBzcC50byA+IGNoKSAmJgorICAgICAgICAgICghZm91bmQgfHwgZm91bmQud2lk
dGggPCBzcC5tYXJrZXIud2lkdGgpKQorICAgICAgICBmb3VuZCA9IHNwLm1hcmtlcjsKKyAgICB9
CisgICAgcmV0dXJuIGZvdW5kOworICB9CisgIGZ1bmN0aW9uIGNvbGxhcHNlZFNwYW5BdFN0YXJ0
KGxpbmUpIHsgcmV0dXJuIGNvbGxhcHNlZFNwYW5BdChsaW5lLCAtMSk7IH0KKyAgZnVuY3Rpb24g
Y29sbGFwc2VkU3BhbkF0RW5kKGxpbmUpIHsgcmV0dXJuIGNvbGxhcHNlZFNwYW5BdChsaW5lLCBs
aW5lLnRleHQubGVuZ3RoICsgMSk7IH0KKworICBmdW5jdGlvbiBsaW5lSXNIaWRkZW4obGluZSkg
eworICAgIHZhciBzcHMgPSBzYXdDb2xsYXBzZWRTcGFucyAmJiBsaW5lLm1hcmtlZFNwYW5zOwor
ICAgIGlmIChzcHMpIGZvciAodmFyIHNwLCBpID0gMDsgaSA8IHNwcy5sZW5ndGg7ICsraSkgewor
ICAgICAgc3AgPSBzcHNbaV07CisgICAgICBpZiAoIXNwLm1hcmtlci5jb2xsYXBzZWQpIGNvbnRp
bnVlOworICAgICAgaWYgKHNwLmZyb20gPT0gbnVsbCkgcmV0dXJuIHRydWU7CisgICAgICBpZiAo
c3AuZnJvbSA9PSAwICYmIHNwLm1hcmtlci5pbmNsdXNpdmVMZWZ0ICYmIGxpbmVJc0hpZGRlbklu
bmVyKGxpbmUsIHNwKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICB9CisgIHdpbmRv
dy5saW5lSXNIaWRkZW4gPSBsaW5lSXNIaWRkZW47CisgIGZ1bmN0aW9uIGxpbmVJc0hpZGRlbklu
bmVyKGxpbmUsIHNwYW4pIHsKKyAgICBpZiAoc3Bhbi50byA9PSBudWxsIHx8IHNwYW4ubWFya2Vy
LmluY2x1c2l2ZVJpZ2h0ICYmIHNwYW4udG8gPT0gbGluZS50ZXh0Lmxlbmd0aCkKKyAgICAgIHJl
dHVybiB0cnVlOworICAgIGZvciAodmFyIHNwLCBpID0gMDsgaSA8IGxpbmUubWFya2VkU3BhbnMu
bGVuZ3RoOyArK2kpIHsKKyAgICAgIHNwID0gbGluZS5tYXJrZWRTcGFuc1tpXTsKKyAgICAgIGlm
IChzcC5tYXJrZXIuY29sbGFwc2VkICYmIHNwLmZyb20gPT0gc3Bhbi50byAmJgorICAgICAgICAg
IChzcC5tYXJrZXIuaW5jbHVzaXZlTGVmdCB8fCBzcGFuLm1hcmtlci5pbmNsdXNpdmVSaWdodCkg
JiYKKyAgICAgICAgICBsaW5lSXNIaWRkZW5Jbm5lcihsaW5lLCBzcCkpIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgfQorCisgIC8vIGhsIHN0YW5kcyBmb3IgaGlzdG9yeS1saW5lLCBhIGRhdGEgc3Ry
dWN0dXJlIHRoYXQgY2FuIGJlIGVpdGhlciBhCisgIC8vIHN0cmluZyAobGluZSB3aXRob3V0IG1h
cmtlcnMpIG9yIGEge3RleHQsIG1hcmtlZFNwYW5zfSBvYmplY3QuCisgIGZ1bmN0aW9uIGhsVGV4
dCh2YWwpIHsgcmV0dXJuIHR5cGVvZiB2YWwgPT0gInN0cmluZyIgPyB2YWwgOiB2YWwudGV4dDsg
fQorICBmdW5jdGlvbiBobFNwYW5zKHZhbCkgeworICAgIGlmICh0eXBlb2YgdmFsID09ICJzdHJp
bmciKSByZXR1cm4gbnVsbDsKKyAgICB2YXIgc3BhbnMgPSB2YWwubWFya2VkU3BhbnMsIG91dCA9
IG51bGw7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzcGFucy5sZW5ndGg7ICsraSkgeworICAg
ICAgaWYgKHNwYW5zW2ldLm1hcmtlci5leHBsaWNpdGx5Q2xlYXJlZCkgeyBpZiAoIW91dCkgb3V0
ID0gc3BhbnMuc2xpY2UoMCwgaSk7IH0KKyAgICAgIGVsc2UgaWYgKG91dCkgb3V0LnB1c2goc3Bh
bnNbaV0pOworICAgIH0KKyAgICByZXR1cm4gIW91dCA/IHNwYW5zIDogb3V0Lmxlbmd0aCA/IG91
dCA6IG51bGw7CisgIH0KKyAgZnVuY3Rpb24gbmV3SEwodGV4dCwgc3BhbnMpIHsgcmV0dXJuIHNw
YW5zID8ge3RleHQ6IHRleHQsIG1hcmtlZFNwYW5zOiBzcGFuc30gOiB0ZXh0OyB9CisKKyAgZnVu
Y3Rpb24gZGV0YWNoTWFya2VkU3BhbnMobGluZSkgeworICAgIHZhciBzcGFucyA9IGxpbmUubWFy
a2VkU3BhbnM7CisgICAgaWYgKCFzcGFucykgcmV0dXJuOworICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgc3BhbnMubGVuZ3RoOyArK2kpIHsKKyAgICAgIHZhciBsaW5lcyA9IHNwYW5zW2ldLm1hcmtl
ci5saW5lczsKKyAgICAgIHZhciBpeCA9IGluZGV4T2YobGluZXMsIGxpbmUpOworICAgICAgbGlu
ZXMuc3BsaWNlKGl4LCAxKTsKKyAgICB9CisgICAgbGluZS5tYXJrZWRTcGFucyA9IG51bGw7Cisg
IH0KKworICBmdW5jdGlvbiBhdHRhY2hNYXJrZWRTcGFucyhsaW5lLCBzcGFucykgeworICAgIGlm
ICghc3BhbnMpIHJldHVybjsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNwYW5zLmxlbmd0aDsg
KytpKQorICAgICAgdmFyIG1hcmtlciA9IHNwYW5zW2ldLm1hcmtlci5saW5lcy5wdXNoKGxpbmUp
OworICAgIGxpbmUubWFya2VkU3BhbnMgPSBzcGFuczsKKyAgfQorCisgIC8vIExJTkUgREFUQSBT
VFJVQ1RVUkUKKworICAvLyBMaW5lIG9iamVjdHMuIFRoZXNlIGhvbGQgc3RhdGUgcmVsYXRlZCB0
byBhIGxpbmUsIGluY2x1ZGluZworICAvLyBoaWdobGlnaHRpbmcgaW5mbyAodGhlIHN0eWxlcyBh
cnJheSkuCisgIGZ1bmN0aW9uIG1ha2VMaW5lKHRleHQsIG1hcmtlZFNwYW5zLCBoZWlnaHQpIHsK
KyAgICB2YXIgbGluZSA9IHt0ZXh0OiB0ZXh0LCBoZWlnaHQ6IGhlaWdodH07CisgICAgYXR0YWNo
TWFya2VkU3BhbnMobGluZSwgbWFya2VkU3BhbnMpOworICAgIGlmIChtYXJrZWRTcGFucyAmJiBj
b2xsYXBzZWRTcGFuQXRTdGFydChsaW5lKSkgbGluZS5oZWlnaHQgPSAwOworICAgIHJldHVybiBs
aW5lOworICB9CisKKyAgZnVuY3Rpb24gdXBkYXRlTGluZShjbSwgbGluZSwgdGV4dCwgbWFya2Vk
U3BhbnMpIHsKKyAgICBsaW5lLnRleHQgPSB0ZXh0OworICAgIGxpbmUuc3RhdGVBZnRlciA9IGxp
bmUuc3R5bGVzID0gbnVsbDsKKyAgICBpZiAobGluZS5vcmRlciAhPSBudWxsKSBsaW5lLm9yZGVy
ID0gbnVsbDsKKyAgICBkZXRhY2hNYXJrZWRTcGFucyhsaW5lKTsKKyAgICBhdHRhY2hNYXJrZWRT
cGFucyhsaW5lLCBtYXJrZWRTcGFucyk7CisgICAgdmFyIGhpZGRlbiA9IGNvbGxhcHNlZFNwYW5B
dFN0YXJ0KGxpbmUpOworICAgIGlmIChoaWRkZW4pIGxpbmUuaGVpZ2h0ID0gMDsKKyAgICBlbHNl
IGlmICghbGluZS5oZWlnaHQpIGxpbmUuaGVpZ2h0ID0gdGV4dEhlaWdodChjbS5kaXNwbGF5KTsK
KyAgICBzaWduYWxMYXRlcihjbSwgbGluZSwgImNoYW5nZSIpOworICB9CisKKyAgZnVuY3Rpb24g
Y2xlYW5VcExpbmUobGluZSkgeworICAgIGxpbmUucGFyZW50ID0gbnVsbDsKKyAgICBkZXRhY2hN
YXJrZWRTcGFucyhsaW5lKTsKKyAgfQorCisgIC8vIFJ1biB0aGUgZ2l2ZW4gbW9kZSdzIHBhcnNl
ciBvdmVyIGEgbGluZSwgdXBkYXRlIHRoZSBzdHlsZXMKKyAgLy8gYXJyYXksIHdoaWNoIGNvbnRh
aW5zIGFsdGVybmF0aW5nIGZyYWdtZW50cyBvZiB0ZXh0IGFuZCBDU1MKKyAgLy8gY2xhc3Nlcy4K
KyAgZnVuY3Rpb24gaGlnaGxpZ2h0TGluZShjbSwgbGluZSwgc3RhdGUpIHsKKyAgICB2YXIgbW9k
ZSA9IGNtLnZpZXcubW9kZSwgZmxhdHRlblNwYW5zID0gY20ub3B0aW9ucy5mbGF0dGVuU3BhbnM7
CisgICAgdmFyIGNoYW5nZWQgPSAhbGluZS5zdHlsZXMsIHBvcyA9IDAsIGN1clRleHQgPSAiIiwg
Y3VyU3R5bGUgPSBudWxsOworICAgIHZhciBzdHJlYW0gPSBuZXcgU3RyaW5nU3RyZWFtKGxpbmUu
dGV4dCwgY20ub3B0aW9ucy50YWJTaXplKSwgc3QgPSBsaW5lLnN0eWxlcyB8fCAobGluZS5zdHls
ZXMgPSBbXSk7CisgICAgaWYgKGxpbmUudGV4dCA9PSAiIiAmJiBtb2RlLmJsYW5rTGluZSkgbW9k
ZS5ibGFua0xpbmUoc3RhdGUpOworICAgIHdoaWxlICghc3RyZWFtLmVvbCgpKSB7CisgICAgICB2
YXIgc3R5bGUgPSBtb2RlLnRva2VuKHN0cmVhbSwgc3RhdGUpLCBzdWJzdHIgPSBzdHJlYW0uY3Vy
cmVudCgpOworICAgICAgc3RyZWFtLnN0YXJ0ID0gc3RyZWFtLnBvczsKKyAgICAgIGlmICghZmxh
dHRlblNwYW5zIHx8IGN1clN0eWxlICE9IHN0eWxlKSB7CisgICAgICAgIGlmIChjdXJUZXh0KSB7
CisgICAgICAgICAgY2hhbmdlZCA9IGNoYW5nZWQgfHwgcG9zID49IHN0Lmxlbmd0aCB8fCBjdXJU
ZXh0ICE9IHN0W3Bvc10gfHwgY3VyU3R5bGUgIT0gc3RbcG9zKzFdOworICAgICAgICAgIHN0W3Bv
cysrXSA9IGN1clRleHQ7IHN0W3BvcysrXSA9IGN1clN0eWxlOwogICAgICAgICB9Ci0gICAgICAg
IC8vIEdpdmUgdXAgd2hlbiBsaW5lIGlzIHJpZGljdWxvdXNseSBsb25nCi0gICAgICAgIGlmIChz
dHJlYW0ucG9zID4gNTAwMCkgewotICAgICAgICAgIHN0W3BvcysrXSA9IHRoaXMudGV4dC5zbGlj
ZShzdHJlYW0ucG9zKTsgc3RbcG9zKytdID0gbnVsbDsKLSAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY3VyVGV4dCA9IHN1YnN0cjsgY3VyU3R5bGUgPSBzdHlsZTsKKyAgICAgIH0gZWxzZSBjdXJU
ZXh0ID0gY3VyVGV4dCArIHN1YnN0cjsKKyAgICAgIC8vIEdpdmUgdXAgd2hlbiBsaW5lIGlzIHJp
ZGljdWxvdXNseSBsb25nCisgICAgICBpZiAoc3RyZWFtLnBvcyA+IDUwMDApIGJyZWFrOworICAg
IH0KKyAgICBpZiAoY3VyVGV4dCkgeworICAgICAgY2hhbmdlZCA9IGNoYW5nZWQgfHwgcG9zID49
IHN0Lmxlbmd0aCB8fCBjdXJUZXh0ICE9IHN0W3Bvc10gfHwgY3VyU3R5bGUgIT0gc3RbcG9zKzFd
OworICAgICAgc3RbcG9zKytdID0gY3VyVGV4dDsgc3RbcG9zKytdID0gY3VyU3R5bGU7CisgICAg
fQorICAgIGlmIChzdHJlYW0ucG9zID4gNTAwMCkgeyBzdFtwb3MrK10gPSBsaW5lLnRleHQuc2xp
Y2Uoc3RyZWFtLnBvcyk7IHN0W3BvcysrXSA9IG51bGw7IH0KKyAgICBpZiAocG9zICE9IHN0Lmxl
bmd0aCkgeyBzdC5sZW5ndGggPSBwb3M7IGNoYW5nZWQgPSB0cnVlOyB9CisgICAgcmV0dXJuIGNo
YW5nZWQ7CisgIH0KKworICAvLyBMaWdodHdlaWdodCBmb3JtIG9mIGhpZ2hsaWdodCAtLSBwcm9j
ZWVkIG92ZXIgdGhpcyBsaW5lIGFuZAorICAvLyB1cGRhdGUgc3RhdGUsIGJ1dCBkb24ndCBzYXZl
IGEgc3R5bGUgYXJyYXkuCisgIGZ1bmN0aW9uIHByb2Nlc3NMaW5lKGNtLCBsaW5lLCBzdGF0ZSkg
eworICAgIHZhciBtb2RlID0gY20udmlldy5tb2RlOworICAgIHZhciBzdHJlYW0gPSBuZXcgU3Ry
aW5nU3RyZWFtKGxpbmUudGV4dCwgY20ub3B0aW9ucy50YWJTaXplKTsKKyAgICBpZiAobGluZS50
ZXh0ID09ICIiICYmIG1vZGUuYmxhbmtMaW5lKSBtb2RlLmJsYW5rTGluZShzdGF0ZSk7CisgICAg
d2hpbGUgKCFzdHJlYW0uZW9sKCkgJiYgc3RyZWFtLnBvcyA8PSA1MDAwKSB7CisgICAgICBtb2Rl
LnRva2VuKHN0cmVhbSwgc3RhdGUpOworICAgICAgc3RyZWFtLnN0YXJ0ID0gc3RyZWFtLnBvczsK
KyAgICB9CisgIH0KKworICAvLyBGZXRjaCB0aGUgcGFyc2VyIHRva2VuIGZvciBhIGdpdmVuIGNo
YXJhY3Rlci4gVXNlZnVsIGZvciBoYWNrcworICAvLyB0aGF0IHdhbnQgdG8gaW5zcGVjdCB0aGUg
bW9kZSBzdGF0ZSAoc2F5LCBmb3IgY29tcGxldGlvbikuCisgIGZ1bmN0aW9uIGdldFRva2VuQXQo
Y20sIGxpbmUsIHN0YXRlLCBjaCkgeworICAgIHZhciBtb2RlID0gY20udmlldy5tb2RlOworICAg
IHZhciB0eHQgPSBsaW5lLnRleHQsIHN0cmVhbSA9IG5ldyBTdHJpbmdTdHJlYW0odHh0LCBjbS5v
cHRpb25zLnRhYlNpemUpOworICAgIHdoaWxlIChzdHJlYW0ucG9zIDwgY2ggJiYgIXN0cmVhbS5l
b2woKSkgeworICAgICAgc3RyZWFtLnN0YXJ0ID0gc3RyZWFtLnBvczsKKyAgICAgIHZhciBzdHls
ZSA9IG1vZGUudG9rZW4oc3RyZWFtLCBzdGF0ZSk7CisgICAgfQorICAgIHJldHVybiB7c3RhcnQ6
IHN0cmVhbS5zdGFydCwKKyAgICAgICAgICAgIGVuZDogc3RyZWFtLnBvcywKKyAgICAgICAgICAg
IHN0cmluZzogc3RyZWFtLmN1cnJlbnQoKSwKKyAgICAgICAgICAgIGNsYXNzTmFtZTogc3R5bGUg
fHwgbnVsbCwKKyAgICAgICAgICAgIHN0YXRlOiBzdGF0ZX07CisgIH0KKworICB2YXIgc3R5bGVU
b0NsYXNzQ2FjaGUgPSB7fTsKKyAgZnVuY3Rpb24gc3R5bGVUb0NsYXNzKHN0eWxlKSB7CisgICAg
aWYgKCFzdHlsZSkgcmV0dXJuIG51bGw7CisgICAgcmV0dXJuIHN0eWxlVG9DbGFzc0NhY2hlW3N0
eWxlXSB8fAorICAgICAgKHN0eWxlVG9DbGFzc0NhY2hlW3N0eWxlXSA9ICJjbS0iICsgc3R5bGUu
cmVwbGFjZSgvICsvZywgIiBjbS0iKSk7CisgIH0KKworICBmdW5jdGlvbiBsaW5lQ29udGVudChj
bSwgcmVhbExpbmUsIG1lYXN1cmUpIHsKKyAgICB2YXIgbWVyZ2VkLCBsaW5lID0gcmVhbExpbmUs
IGxpbmVCZWZvcmUsIHNhd0JlZm9yZTsKKyAgICB3aGlsZSAobWVyZ2VkID0gY29sbGFwc2VkU3Bh
bkF0U3RhcnQobGluZSkpIHsKKyAgICAgIGxpbmUgPSBnZXRMaW5lKGNtLnZpZXcuZG9jLCBtZXJn
ZWQuZmluZCgpLmZyb20ubGluZSk7CisgICAgICBpZiAoIWxpbmVCZWZvcmUpIGxpbmVCZWZvcmUg
PSBsaW5lOworICAgIH0KKworICAgIHZhciBidWlsZGVyID0ge3ByZTogZWx0KCJwcmUiKSwgY29s
OiAwLCBwb3M6IDAsIGRpc3BsYXk6ICFtZWFzdXJlLAorICAgICAgICAgICAgICAgICAgIG1lYXN1
cmU6IG51bGwsIGFkZGVkT25lOiBmYWxzZSwgY206IGNtfTsKKyAgICBpZiAobGluZS50ZXh0Q2xh
c3MpIGJ1aWxkZXIucHJlLmNsYXNzTmFtZSA9IGxpbmUudGV4dENsYXNzOworCisgICAgZG8gewor
ICAgICAgaWYgKCFsaW5lLnN0eWxlcykKKyAgICAgICAgaGlnaGxpZ2h0TGluZShjbSwgbGluZSwg
bGluZS5zdGF0ZUFmdGVyID0gZ2V0U3RhdGVCZWZvcmUoY20sIGxpbmVObyhsaW5lKSkpOworICAg
ICAgYnVpbGRlci5tZWFzdXJlID0gbGluZSA9PSByZWFsTGluZSAmJiBtZWFzdXJlOworICAgICAg
YnVpbGRlci5wb3MgPSAwOworICAgICAgYnVpbGRlci5hZGRUb2tlbiA9IGJ1aWxkZXIubWVhc3Vy
ZSA/IGJ1aWxkVG9rZW5NZWFzdXJlIDogYnVpbGRUb2tlbjsKKyAgICAgIGlmIChtZWFzdXJlICYm
IHNhd0JlZm9yZSAmJiBsaW5lICE9IHJlYWxMaW5lICYmICFidWlsZGVyLmFkZGVkT25lKSB7Cisg
ICAgICAgIG1lYXN1cmVbMF0gPSBidWlsZGVyLnByZS5hcHBlbmRDaGlsZChlbHQoInNwYW4iLCAi
XHUyMDBiIikpOworICAgICAgICBidWlsZGVyLmFkZGVkT25lID0gdHJ1ZTsKKyAgICAgIH0KKyAg
ICAgIHZhciBuZXh0ID0gaW5zZXJ0TGluZUNvbnRlbnQobGluZSwgYnVpbGRlcik7CisgICAgICBz
YXdCZWZvcmUgPSBsaW5lID09IGxpbmVCZWZvcmU7CisgICAgICBpZiAobmV4dCkgbGluZSA9IGdl
dExpbmUoY20udmlldy5kb2MsIG5leHQudG8ubGluZSk7CisgICAgfSB3aGlsZSAobmV4dCk7CisK
KyAgICBpZiAobWVhc3VyZSAmJiAhYnVpbGRlci5hZGRlZE9uZSkKKyAgICAgIG1lYXN1cmVbMF0g
PSBidWlsZGVyLnByZS5hcHBlbmRDaGlsZChlbHQoInNwYW4iLCAiXHUyMDBiIikpOworICAgIGlm
ICghYnVpbGRlci5wcmUuZmlyc3RDaGlsZCAmJiAhbGluZUlzSGlkZGVuKHJlYWxMaW5lKSkKKyAg
ICAgIGJ1aWxkZXIucHJlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJcdTAw
YTAiKSk7CisKKyAgICByZXR1cm4gYnVpbGRlci5wcmU7CisgIH0KKworICB2YXIgdG9rZW5TcGVj
aWFsQ2hhcnMgPSAvW1x0XHUwMDAwLVx1MDAxOVx1MjAwYlx1MjAyOFx1MjAyOVx1RkVGRl0vZzsK
KyAgZnVuY3Rpb24gYnVpbGRUb2tlbihidWlsZGVyLCB0ZXh0LCBzdHlsZSwgc3RhcnRTdHlsZSwg
ZW5kU3R5bGUpIHsKKyAgICBpZiAoIXRleHQpIHJldHVybjsKKyAgICBpZiAoIXRva2VuU3BlY2lh
bENoYXJzLnRlc3QodGV4dCkpIHsKKyAgICAgIGJ1aWxkZXIuY29sICs9IHRleHQubGVuZ3RoOwor
ICAgICAgdmFyIGNvbnRlbnQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0ZXh0KTsKKyAgICB9
IGVsc2UgeworICAgICAgdmFyIGNvbnRlbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdt
ZW50KCksIHBvcyA9IDA7CisgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICB0b2tlblNwZWNp
YWxDaGFycy5sYXN0SW5kZXggPSBwb3M7CisgICAgICAgIHZhciBtID0gdG9rZW5TcGVjaWFsQ2hh
cnMuZXhlYyh0ZXh0KTsKKyAgICAgICAgdmFyIHNraXBwZWQgPSBtID8gbS5pbmRleCAtIHBvcyA6
IHRleHQubGVuZ3RoIC0gcG9zOworICAgICAgICBpZiAoc2tpcHBlZCkgeworICAgICAgICAgIGNv
bnRlbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGV4dC5zbGljZShwb3Ms
IHBvcyArIHNraXBwZWQpKSk7CisgICAgICAgICAgYnVpbGRlci5jb2wgKz0gc2tpcHBlZDsKICAg
ICAgICAgfQotICAgICAgfQotICAgICAgaWYgKHN0Lmxlbmd0aCAhPSBwb3MpIHtzdC5sZW5ndGgg
PSBwb3M7IGNoYW5nZWQgPSB0cnVlO30KLSAgICAgIGlmIChwb3MgJiYgc3RbcG9zLTJdICE9IHBy
ZXZXb3JkKSBjaGFuZ2VkID0gdHJ1ZTsKLSAgICAgIC8vIFNob3J0IGxpbmVzIHdpdGggc2ltcGxl
IGhpZ2hsaWdodHMgcmV0dXJuIG51bGwsIGFuZCBhcmUKLSAgICAgIC8vIGNvdW50ZWQgYXMgY2hh
bmdlZCBieSB0aGUgZHJpdmVyIGJlY2F1c2UgdGhleSBhcmUgbGlrZWx5IHRvCi0gICAgICAvLyBo
aWdobGlnaHQgdGhlIHNhbWUgd2F5IGluIHZhcmlvdXMgY29udGV4dHMuCi0gICAgICByZXR1cm4g
Y2hhbmdlZCB8fCAoc3QubGVuZ3RoIDwgNSAmJiB0aGlzLnRleHQubGVuZ3RoIDwgMTAgPyBudWxs
IDogZmFsc2UpOwotICAgIH0sCi0gICAgLy8gRmV0Y2ggdGhlIHBhcnNlciB0b2tlbiBmb3IgYSBn
aXZlbiBjaGFyYWN0ZXIuIFVzZWZ1bCBmb3IgaGFja3MKLSAgICAvLyB0aGF0IHdhbnQgdG8gaW5z
cGVjdCB0aGUgbW9kZSBzdGF0ZSAoc2F5LCBmb3IgY29tcGxldGlvbikuCi0gICAgZ2V0VG9rZW5B
dDogZnVuY3Rpb24obW9kZSwgc3RhdGUsIHRhYlNpemUsIGNoKSB7Ci0gICAgICB2YXIgdHh0ID0g
dGhpcy50ZXh0LCBzdHJlYW0gPSBuZXcgU3RyaW5nU3RyZWFtKHR4dCwgdGFiU2l6ZSk7Ci0gICAg
ICB3aGlsZSAoc3RyZWFtLnBvcyA8IGNoICYmICFzdHJlYW0uZW9sKCkpIHsKLSAgICAgICAgc3Ry
ZWFtLnN0YXJ0ID0gc3RyZWFtLnBvczsKLSAgICAgICAgdmFyIHN0eWxlID0gbW9kZS50b2tlbihz
dHJlYW0sIHN0YXRlKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiB7c3RhcnQ6IHN0cmVhbS5zdGFy
dCwKLSAgICAgICAgICAgICAgZW5kOiBzdHJlYW0ucG9zLAotICAgICAgICAgICAgICBzdHJpbmc6
IHN0cmVhbS5jdXJyZW50KCksCi0gICAgICAgICAgICAgIGNsYXNzTmFtZTogc3R5bGUgfHwgbnVs
bCwKLSAgICAgICAgICAgICAgc3RhdGU6IHN0YXRlfTsKLSAgICB9LAotICAgIGluZGVudGF0aW9u
OiBmdW5jdGlvbih0YWJTaXplKSB7cmV0dXJuIGNvdW50Q29sdW1uKHRoaXMudGV4dCwgbnVsbCwg
dGFiU2l6ZSk7fSwKLSAgICAvLyBQcm9kdWNlcyBhbiBIVE1MIGZyYWdtZW50IGZvciB0aGUgbGlu
ZSwgdGFraW5nIHNlbGVjdGlvbiwKLSAgICAvLyBtYXJraW5nLCBhbmQgaGlnaGxpZ2h0aW5nIGlu
dG8gYWNjb3VudC4KLSAgICBnZXRFbGVtZW50OiBmdW5jdGlvbihtYWtlVGFiLCB3cmFwQXQsIHdy
YXBXQlIpIHsKLSAgICAgIHZhciBmaXJzdCA9IHRydWUsIGNvbCA9IDAsIHNwZWNpYWxzID0gL1tc
dFx1MDAwMC1cdTAwMTlcdTIwMGJcdTIwMjhcdTIwMjlcdUZFRkZdL2c7Ci0gICAgICB2YXIgcHJl
ID0gZWx0KCJwcmUiKTsKLSAgICAgIGZ1bmN0aW9uIHNwYW5fKGh0bWwsIHRleHQsIHN0eWxlKSB7
Ci0gICAgICAgIGlmICghdGV4dCkgcmV0dXJuOwotICAgICAgICAvLyBXb3JrIGFyb3VuZCBhIGJ1
ZyB3aGVyZSwgaW4gc29tZSBjb21wYXQgbW9kZXMsIElFIGlnbm9yZXMgbGVhZGluZyBzcGFjZXMK
LSAgICAgICAgaWYgKGZpcnN0ICYmIGllICYmIHRleHQuY2hhckF0KDApID09ICIgIikgdGV4dCA9
ICJcdTAwYTAiICsgdGV4dC5zbGljZSgxKTsKLSAgICAgICAgZmlyc3QgPSBmYWxzZTsKLSAgICAg
ICAgaWYgKCFzcGVjaWFscy50ZXN0KHRleHQpKSB7Ci0gICAgICAgICAgY29sICs9IHRleHQubGVu
Z3RoOwotICAgICAgICAgIHZhciBjb250ZW50ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGV4
dCk7CisgICAgICAgIGlmICghbSkgYnJlYWs7CisgICAgICAgIHBvcyArPSBza2lwcGVkICsgMTsK
KyAgICAgICAgaWYgKG1bMF0gPT0gIlx0IikgeworICAgICAgICAgIHZhciB0YWJTaXplID0gYnVp
bGRlci5jbS5vcHRpb25zLnRhYlNpemUsIHRhYldpZHRoID0gdGFiU2l6ZSAtIGJ1aWxkZXIuY29s
ICUgdGFiU2l6ZTsKKyAgICAgICAgICBjb250ZW50LmFwcGVuZENoaWxkKGVsdCgic3BhbiIsIHNw
YWNlU3RyKHRhYldpZHRoKSwgImNtLXRhYiIpKTsKKyAgICAgICAgICBidWlsZGVyLmNvbCArPSB0
YWJXaWR0aDsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICB2YXIgY29udGVudCA9IGRvY3Vt
ZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSwgcG9zID0gMDsKLSAgICAgICAgICB3aGlsZSAo
dHJ1ZSkgewotICAgICAgICAgICAgc3BlY2lhbHMubGFzdEluZGV4ID0gcG9zOwotICAgICAgICAg
ICAgdmFyIG0gPSBzcGVjaWFscy5leGVjKHRleHQpOwotICAgICAgICAgICAgdmFyIHNraXBwZWQg
PSBtID8gbS5pbmRleCAtIHBvcyA6IHRleHQubGVuZ3RoIC0gcG9zOwotICAgICAgICAgICAgaWYg
KHNraXBwZWQpIHsKLSAgICAgICAgICAgICAgY29udGVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5j
cmVhdGVUZXh0Tm9kZSh0ZXh0LnNsaWNlKHBvcywgcG9zICsgc2tpcHBlZCkpKTsKLSAgICAgICAg
ICAgICAgY29sICs9IHNraXBwZWQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIW0p
IGJyZWFrOwotICAgICAgICAgICAgcG9zICs9IHNraXBwZWQgKyAxOwotICAgICAgICAgICAgaWYg
KG1bMF0gPT0gIlx0IikgewotICAgICAgICAgICAgICB2YXIgdGFiID0gbWFrZVRhYihjb2wpOwot
ICAgICAgICAgICAgICBjb250ZW50LmFwcGVuZENoaWxkKHRhYi5lbGVtZW50LmNsb25lTm9kZSh0
cnVlKSk7Ci0gICAgICAgICAgICAgIGNvbCArPSB0YWIud2lkdGg7Ci0gICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICB2YXIgdG9rZW4gPSBlbHQoInNwYW4iLCAiXHUyMDIyIiwgImNt
LWludmFsaWRjaGFyIik7Ci0gICAgICAgICAgICAgIHRva2VuLnRpdGxlID0gIlxcdSIgKyBtWzBd
LmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpOwotICAgICAgICAgICAgICBjb250ZW50LmFwcGVu
ZENoaWxkKHRva2VuKTsKLSAgICAgICAgICAgICAgY29sICs9IDE7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgfQorICAgICAgICAgIHZhciB0b2tlbiA9IGVsdCgic3BhbiIsICJcdTIwMjIiLCAi
Y20taW52YWxpZGNoYXIiKTsKKyAgICAgICAgICB0b2tlbi50aXRsZSA9ICJcXHUiICsgbVswXS5j
aGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KTsKKyAgICAgICAgICBjb250ZW50LmFwcGVuZENoaWxk
KHRva2VuKTsKKyAgICAgICAgICBidWlsZGVyLmNvbCArPSAxOwogICAgICAgICB9Ci0gICAgICAg
IGlmIChzdHlsZSkgaHRtbC5hcHBlbmRDaGlsZChlbHQoInNwYW4iLCBbY29udGVudF0sIHN0eWxl
KSk7Ci0gICAgICAgIGVsc2UgaHRtbC5hcHBlbmRDaGlsZChjb250ZW50KTsKLSAgICAgIH0KLSAg
ICAgIHZhciBzcGFuID0gc3Bhbl87Ci0gICAgICBpZiAod3JhcEF0ICE9IG51bGwpIHsKLSAgICAg
ICAgdmFyIG91dFBvcyA9IDAsIGFuY2hvciA9IHByZS5hbmNob3IgPSBlbHQoInNwYW4iKTsKLSAg
ICAgICAgc3BhbiA9IGZ1bmN0aW9uKGh0bWwsIHRleHQsIHN0eWxlKSB7Ci0gICAgICAgICAgdmFy
IGwgPSB0ZXh0Lmxlbmd0aDsKLSAgICAgICAgICBpZiAod3JhcEF0ID49IG91dFBvcyAmJiB3cmFw
QXQgPCBvdXRQb3MgKyBsKSB7Ci0gICAgICAgICAgICBpZiAod3JhcEF0ID4gb3V0UG9zKSB7Ci0g
ICAgICAgICAgICAgIHNwYW5fKGh0bWwsIHRleHQuc2xpY2UoMCwgd3JhcEF0IC0gb3V0UG9zKSwg
c3R5bGUpOwotICAgICAgICAgICAgICAvLyBTZWUgY29tbWVudCBhdCB0aGUgZGVmaW5pdGlvbiBv
ZiBzcGFuQWZmZWN0c1dyYXBwaW5nCi0gICAgICAgICAgICAgIGlmICh3cmFwV0JSKSBodG1sLmFw
cGVuZENoaWxkKGVsdCgid2JyIikpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaHRtbC5h
cHBlbmRDaGlsZChhbmNob3IpOwotICAgICAgICAgICAgdmFyIGN1dCA9IHdyYXBBdCAtIG91dFBv
czsKLSAgICAgICAgICAgIHNwYW5fKGFuY2hvciwgb3BlcmEgPyB0ZXh0LnNsaWNlKGN1dCwgY3V0
ICsgMSkgOiB0ZXh0LnNsaWNlKGN1dCksIHN0eWxlKTsKLSAgICAgICAgICAgIGlmIChvcGVyYSkg
c3Bhbl8oaHRtbCwgdGV4dC5zbGljZShjdXQgKyAxKSwgc3R5bGUpOwotICAgICAgICAgICAgd3Jh
cEF0LS07Ci0gICAgICAgICAgICBvdXRQb3MgKz0gbDsKLSAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgb3V0UG9zICs9IGw7Ci0gICAgICAgICAgICBzcGFuXyhodG1sLCB0ZXh0LCBzdHls
ZSk7Ci0gICAgICAgICAgICBpZiAob3V0UG9zID09IHdyYXBBdCAmJiBvdXRQb3MgPT0gbGVuKSB7
Ci0gICAgICAgICAgICAgIHNldFRleHRDb250ZW50KGFuY2hvciwgZW9sU3BhbkNvbnRlbnQpOwot
ICAgICAgICAgICAgICBodG1sLmFwcGVuZENoaWxkKGFuY2hvcik7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAvLyBTdG9wIG91dHB1dHRpbmcgSFRNTCB3aGVuIGdvbmUgc3VmZmljaWVudGx5
IGZhciBiZXlvbmQgbWVhc3VyZQotICAgICAgICAgICAgZWxzZSBpZiAob3V0UG9zID4gd3JhcEF0
ICsgMTAgJiYgL1xzLy50ZXN0KHRleHQpKSBzcGFuID0gZnVuY3Rpb24oKXt9OwotICAgICAgICAg
IH0KLSAgICAgICAgfTsKICAgICAgIH0KKyAgICB9CisgICAgaWYgKHN0eWxlIHx8IHN0YXJ0U3R5
bGUgfHwgZW5kU3R5bGUgfHwgYnVpbGRlci5tZWFzdXJlKSB7CisgICAgICB2YXIgZnVsbFN0eWxl
ID0gc3R5bGUgfHwgIiI7CisgICAgICBpZiAoc3RhcnRTdHlsZSkgZnVsbFN0eWxlICs9IHN0YXJ0
U3R5bGU7CisgICAgICBpZiAoZW5kU3R5bGUpIGZ1bGxTdHlsZSArPSBlbmRTdHlsZTsKKyAgICAg
IHJldHVybiBidWlsZGVyLnByZS5hcHBlbmRDaGlsZChlbHQoInNwYW4iLCBbY29udGVudF0sIGZ1
bGxTdHlsZSkpOworICAgIH0KKyAgICBidWlsZGVyLnByZS5hcHBlbmRDaGlsZChjb250ZW50KTsK
KyAgfQorCisgIGZ1bmN0aW9uIGJ1aWxkVG9rZW5NZWFzdXJlKGJ1aWxkZXIsIHRleHQsIHN0eWxl
LCBzdGFydFN0eWxlLCBlbmRTdHlsZSkgeworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGV4dC5s
ZW5ndGg7ICsraSkgeworICAgICAgaWYgKGkgJiYgaSA8IHRleHQubGVuZ3RoIC0gMSAmJgorICAg
ICAgICAgIGJ1aWxkZXIuY20ub3B0aW9ucy5saW5lV3JhcHBpbmcgJiYKKyAgICAgICAgICBzcGFu
QWZmZWN0c1dyYXBwaW5nLnRlc3QodGV4dC5zbGljZShpIC0gMSwgaSArIDEpKSkKKyAgICAgICAg
YnVpbGRlci5wcmUuYXBwZW5kQ2hpbGQoZWx0KCJ3YnIiKSk7CisgICAgICBidWlsZGVyLm1lYXN1
cmVbYnVpbGRlci5wb3MrK10gPQorICAgICAgICBidWlsZFRva2VuKGJ1aWxkZXIsIHRleHQuY2hh
ckF0KGkpLCBzdHlsZSwKKyAgICAgICAgICAgICAgICAgICBpID09IDAgJiYgc3RhcnRTdHlsZSwg
aSA9PSB0ZXh0Lmxlbmd0aCAtIDEgJiYgZW5kU3R5bGUpOworICAgIH0KKyAgICBpZiAodGV4dC5s
ZW5ndGgpIGJ1aWxkZXIuYWRkZWRPbmUgPSB0cnVlOworICB9CisKKyAgZnVuY3Rpb24gYnVpbGRD
b2xsYXBzZWRTcGFuKGJ1aWxkZXIsIHNpemUsIHdpZGdldCkgeworICAgIGlmICh3aWRnZXQpIHsK
KyAgICAgIGlmICghYnVpbGRlci5kaXNwbGF5KSB3aWRnZXQgPSB3aWRnZXQuY2xvbmVOb2RlKHRy
dWUpOworICAgICAgYnVpbGRlci5wcmUuYXBwZW5kQ2hpbGQod2lkZ2V0KTsKKyAgICAgIGlmIChi
dWlsZGVyLm1lYXN1cmUgJiYgc2l6ZSkgeworICAgICAgICBidWlsZGVyLm1lYXN1cmVbYnVpbGRl
ci5wb3NdID0gd2lkZ2V0OworICAgICAgICBidWlsZGVyLmFkZGVkT25lID0gdHJ1ZTsKKyAgICAg
IH0KKyAgICB9CisgICAgYnVpbGRlci5wb3MgKz0gc2l6ZTsKKyAgfQogCi0gICAgICB2YXIgc3Qg
PSB0aGlzLnN0eWxlcywgYWxsVGV4dCA9IHRoaXMudGV4dCwgbWFya2VkID0gdGhpcy5tYXJrZWQ7
Ci0gICAgICB2YXIgbGVuID0gYWxsVGV4dC5sZW5ndGg7Ci0gICAgICBmdW5jdGlvbiBzdHlsZVRv
Q2xhc3Moc3R5bGUpIHsKLSAgICAgICAgaWYgKCFzdHlsZSkgcmV0dXJuIG51bGw7Ci0gICAgICAg
IHJldHVybiAiY20tIiArIHN0eWxlLnJlcGxhY2UoLyArL2csICIgY20tIik7Ci0gICAgICB9Ci0g
ICAgICBpZiAoIWFsbFRleHQgJiYgd3JhcEF0ID09IG51bGwpIHsKLSAgICAgICAgc3BhbihwcmUs
ICIgIik7Ci0gICAgICB9IGVsc2UgaWYgKCFtYXJrZWQgfHwgIW1hcmtlZC5sZW5ndGgpIHsKLSAg
ICAgICAgZm9yICh2YXIgaSA9IDAsIGNoID0gMDsgY2ggPCBsZW47IGkrPTIpIHsKLSAgICAgICAg
ICB2YXIgc3RyID0gc3RbaV0sIHN0eWxlID0gc3RbaSsxXSwgbCA9IHN0ci5sZW5ndGg7Ci0gICAg
ICAgICAgaWYgKGNoICsgbCA+IGxlbikgc3RyID0gc3RyLnNsaWNlKDAsIGxlbiAtIGNoKTsKLSAg
ICAgICAgICBjaCArPSBsOwotICAgICAgICAgIHNwYW4ocHJlLCBzdHIsIHN0eWxlVG9DbGFzcyhz
dHlsZSkpOwotICAgICAgICB9Ci0gICAgICB9IGVsc2UgewotICAgICAgICB2YXIgcG9zID0gMCwg
aSA9IDAsIHRleHQgPSAiIiwgc3R5bGUsIHNnID0gMDsKLSAgICAgICAgdmFyIG5leHRDaGFuZ2Ug
PSBtYXJrZWRbMF0uZnJvbSB8fCAwLCBtYXJrcyA9IFtdLCBtYXJrcG9zID0gMDsKLSAgICAgICAg
dmFyIGFkdmFuY2VNYXJrcyA9IGZ1bmN0aW9uKCkgewotICAgICAgICAgIHZhciBtOwotICAgICAg
ICAgIHdoaWxlIChtYXJrcG9zIDwgbWFya2VkLmxlbmd0aCAmJgotICAgICAgICAgICAgICAgICAo
KG0gPSBtYXJrZWRbbWFya3Bvc10pLmZyb20gPT0gcG9zIHx8IG0uZnJvbSA9PSBudWxsKSkgewot
ICAgICAgICAgICAgaWYgKG0uc3R5bGUgIT0gbnVsbCkgbWFya3MucHVzaChtKTsKLSAgICAgICAg
ICAgICsrbWFya3BvczsKLSAgICAgICAgICB9Ci0gICAgICAgICAgbmV4dENoYW5nZSA9IG1hcmtw
b3MgPCBtYXJrZWQubGVuZ3RoID8gbWFya2VkW21hcmtwb3NdLmZyb20gOiBJbmZpbml0eTsKLSAg
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1hcmtzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAg
ICAgICB2YXIgdG8gPSBtYXJrc1tpXS50bzsKLSAgICAgICAgICAgIGlmICh0byA9PSBudWxsKSB0
byA9IEluZmluaXR5OwotICAgICAgICAgICAgaWYgKHRvID09IHBvcykgbWFya3Muc3BsaWNlKGkt
LSwgMSk7Ci0gICAgICAgICAgICBlbHNlIG5leHRDaGFuZ2UgPSBNYXRoLm1pbih0bywgbmV4dENo
YW5nZSk7Ci0gICAgICAgICAgfQotICAgICAgICB9OwotICAgICAgICB2YXIgbSA9IDA7Ci0gICAg
ICAgIHdoaWxlIChwb3MgPCBsZW4pIHsKLSAgICAgICAgICBpZiAobmV4dENoYW5nZSA9PSBwb3Mp
IGFkdmFuY2VNYXJrcygpOwotICAgICAgICAgIHZhciB1cHRvID0gTWF0aC5taW4obGVuLCBuZXh0
Q2hhbmdlKTsKLSAgICAgICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICAgICAgaWYgKHRleHQp
IHsKLSAgICAgICAgICAgICAgdmFyIGVuZCA9IHBvcyArIHRleHQubGVuZ3RoOwotICAgICAgICAg
ICAgICB2YXIgYXBwbGllZFN0eWxlID0gc3R5bGU7Ci0gICAgICAgICAgICAgIGZvciAodmFyIGog
PSAwOyBqIDwgbWFya3MubGVuZ3RoOyArK2opCi0gICAgICAgICAgICAgICAgYXBwbGllZFN0eWxl
ID0gKGFwcGxpZWRTdHlsZSA/IGFwcGxpZWRTdHlsZSArICIgIiA6ICIiKSArIG1hcmtzW2pdLnN0
eWxlOwotICAgICAgICAgICAgICBzcGFuKHByZSwgZW5kID4gdXB0byA/IHRleHQuc2xpY2UoMCwg
dXB0byAtIHBvcykgOiB0ZXh0LCBhcHBsaWVkU3R5bGUpOwotICAgICAgICAgICAgICBpZiAoZW5k
ID49IHVwdG8pIHt0ZXh0ID0gdGV4dC5zbGljZSh1cHRvIC0gcG9zKTsgcG9zID0gdXB0bzsgYnJl
YWs7fQotICAgICAgICAgICAgICBwb3MgPSBlbmQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB0ZXh0ID0gc3RbaSsrXTsgc3R5bGUgPSBzdHlsZVRvQ2xhc3Moc3RbaSsrXSk7CisgIC8vIE91
dHB1dHMgYSBudW1iZXIgb2Ygc3BhbnMgdG8gbWFrZSB1cCBhIGxpbmUsIHRha2luZyBoaWdobGln
aHRpbmcKKyAgLy8gYW5kIG1hcmtlZCB0ZXh0IGludG8gYWNjb3VudC4KKyAgZnVuY3Rpb24gaW5z
ZXJ0TGluZUNvbnRlbnQobGluZSwgYnVpbGRlcikgeworICAgIHZhciBzdCA9IGxpbmUuc3R5bGVz
LCBzcGFucyA9IGxpbmUubWFya2VkU3BhbnM7CisgICAgaWYgKCFzcGFucykgeworICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBzdC5sZW5ndGg7IGkrPTIpCisgICAgICAgIGJ1aWxkZXIuYWRkVG9r
ZW4oYnVpbGRlciwgc3RbaV0sIHN0eWxlVG9DbGFzcyhzdFtpKzFdKSk7CisgICAgICByZXR1cm47
CisgICAgfQorCisgICAgdmFyIGFsbFRleHQgPSBsaW5lLnRleHQsIGxlbiA9IGFsbFRleHQubGVu
Z3RoOworICAgIHZhciBwb3MgPSAwLCBpID0gMCwgdGV4dCA9ICIiLCBzdHlsZTsKKyAgICB2YXIg
bmV4dENoYW5nZSA9IDAsIHNwYW5TdHlsZSwgc3BhbkVuZFN0eWxlLCBzcGFuU3RhcnRTdHlsZSwg
Y29sbGFwc2VkOworICAgIGZvciAoOzspIHsKKyAgICAgIGlmIChuZXh0Q2hhbmdlID09IHBvcykg
eyAvLyBVcGRhdGUgY3VycmVudCBtYXJrZXIgc2V0CisgICAgICAgIHNwYW5TdHlsZSA9IHNwYW5F
bmRTdHlsZSA9IHNwYW5TdGFydFN0eWxlID0gIiI7CisgICAgICAgIGNvbGxhcHNlZCA9IG51bGw7
IG5leHRDaGFuZ2UgPSBJbmZpbml0eTsKKyAgICAgICAgdmFyIGZvdW5kQm9va21hcmsgPSBudWxs
OworICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHNwYW5zLmxlbmd0aDsgKytqKSB7CisgICAg
ICAgICAgdmFyIHNwID0gc3BhbnNbal0sIG0gPSBzcC5tYXJrZXI7CisgICAgICAgICAgaWYgKHNw
LmZyb20gPD0gcG9zICYmIChzcC50byA9PSBudWxsIHx8IHNwLnRvID4gcG9zKSkgeworICAgICAg
ICAgICAgaWYgKHNwLnRvICE9IG51bGwgJiYgbmV4dENoYW5nZSA+IHNwLnRvKSB7IG5leHRDaGFu
Z2UgPSBzcC50bzsgc3BhbkVuZFN0eWxlID0gIiI7IH0KKyAgICAgICAgICAgIGlmIChtLmNsYXNz
TmFtZSkgc3BhblN0eWxlICs9ICIgIiArIG0uY2xhc3NOYW1lOworICAgICAgICAgICAgaWYgKG0u
c3RhcnRTdHlsZSAmJiBzcC5mcm9tID09IHBvcykgc3BhblN0YXJ0U3R5bGUgKz0gIiAiICsgbS5z
dGFydFN0eWxlOworICAgICAgICAgICAgaWYgKG0uZW5kU3R5bGUgJiYgc3AudG8gPT0gbmV4dENo
YW5nZSkgc3BhbkVuZFN0eWxlICs9ICIgIiArIG0uZW5kU3R5bGU7CisgICAgICAgICAgICBpZiAo
bS5jb2xsYXBzZWQgJiYgKCFjb2xsYXBzZWQgfHwgY29sbGFwc2VkLm1hcmtlci53aWR0aCA8IG0u
d2lkdGgpKQorICAgICAgICAgICAgICBjb2xsYXBzZWQgPSBzcDsKKyAgICAgICAgICB9IGVsc2Ug
aWYgKHNwLmZyb20gPiBwb3MgJiYgbmV4dENoYW5nZSA+IHNwLmZyb20pIHsKKyAgICAgICAgICAg
IG5leHRDaGFuZ2UgPSBzcC5mcm9tOwogICAgICAgICAgIH0KKyAgICAgICAgICBpZiAobS50eXBl
ID09ICJib29rbWFyayIgJiYgc3AuZnJvbSA9PSBwb3MgJiYgbS5yZXBsYWNlZFdpdGgpCisgICAg
ICAgICAgICBmb3VuZEJvb2ttYXJrID0gbS5yZXBsYWNlZFdpdGg7CiAgICAgICAgIH0KKyAgICAg
ICAgaWYgKGNvbGxhcHNlZCAmJiAoY29sbGFwc2VkLmZyb20gfHwgMCkgPT0gcG9zKSB7CisgICAg
ICAgICAgYnVpbGRDb2xsYXBzZWRTcGFuKGJ1aWxkZXIsIChjb2xsYXBzZWQudG8gPT0gbnVsbCA/
IGxlbiA6IGNvbGxhcHNlZC50bykgLSBwb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbGxhcHNlZC5mcm9tICE9IG51bGwgJiYgY29sbGFwc2VkLm1hcmtlci5yZXBsYWNlZFdpdGgp
OworICAgICAgICAgIGlmIChjb2xsYXBzZWQudG8gPT0gbnVsbCkgcmV0dXJuIGNvbGxhcHNlZC5t
YXJrZXIuZmluZCgpOworICAgICAgICB9CisgICAgICAgIGlmIChmb3VuZEJvb2ttYXJrICYmICFj
b2xsYXBzZWQpIGJ1aWxkQ29sbGFwc2VkU3BhbihidWlsZGVyLCAwLCBmb3VuZEJvb2ttYXJrKTsK
ICAgICAgIH0KLSAgICAgIHJldHVybiBwcmU7Ci0gICAgfSwKLSAgICBjbGVhblVwOiBmdW5jdGlv
bigpIHsKLSAgICAgIHRoaXMucGFyZW50ID0gbnVsbDsKLSAgICAgIGlmICh0aGlzLm1hcmtlZCkK
LSAgICAgICAgZm9yICh2YXIgaSA9IDAsIGUgPSB0aGlzLm1hcmtlZC5sZW5ndGg7IGkgPCBlOyAr
K2kpIHRoaXMubWFya2VkW2ldLmRldGFjaCh0aGlzKTsKLSAgICB9Ci0gIH07Ci0gIC8vIFV0aWxp
dHkgdXNlZCBieSByZXBsYWNlIGFuZCBzcGxpdCBhYm92ZQotICBmdW5jdGlvbiBjb3B5U3R5bGVz
KGZyb20sIHRvLCBzb3VyY2UsIGRlc3QpIHsKLSAgICBmb3IgKHZhciBpID0gMCwgcG9zID0gMCwg
c3RhdGUgPSAwOyBwb3MgPCB0bzsgaSs9MikgewotICAgICAgdmFyIHBhcnQgPSBzb3VyY2VbaV0s
IGVuZCA9IHBvcyArIHBhcnQubGVuZ3RoOwotICAgICAgaWYgKHN0YXRlID09IDApIHsKLSAgICAg
ICAgaWYgKGVuZCA+IGZyb20pIGRlc3QucHVzaChwYXJ0LnNsaWNlKGZyb20gLSBwb3MsIE1hdGgu
bWluKHBhcnQubGVuZ3RoLCB0byAtIHBvcykpLCBzb3VyY2VbaSsxXSk7Ci0gICAgICAgIGlmIChl
bmQgPj0gZnJvbSkgc3RhdGUgPSAxOwotICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PSAxKSB7Ci0g
ICAgICAgIGlmIChlbmQgPiB0bykgZGVzdC5wdXNoKHBhcnQuc2xpY2UoMCwgdG8gLSBwb3MpLCBz
b3VyY2VbaSsxXSk7Ci0gICAgICAgIGVsc2UgZGVzdC5wdXNoKHBhcnQsIHNvdXJjZVtpKzFdKTsK
KyAgICAgIGlmIChwb3MgPj0gbGVuKSBicmVhazsKKworICAgICAgdmFyIHVwdG8gPSBNYXRoLm1p
bihsZW4sIG5leHRDaGFuZ2UpOworICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgaWYgKHRl
eHQpIHsKKyAgICAgICAgICB2YXIgZW5kID0gcG9zICsgdGV4dC5sZW5ndGg7CisgICAgICAgICAg
aWYgKCFjb2xsYXBzZWQpIHsKKyAgICAgICAgICAgIHZhciB0b2tlblRleHQgPSBlbmQgPiB1cHRv
ID8gdGV4dC5zbGljZSgwLCB1cHRvIC0gcG9zKSA6IHRleHQ7CisgICAgICAgICAgICBidWlsZGVy
LmFkZFRva2VuKGJ1aWxkZXIsIHRva2VuVGV4dCwgc3R5bGUgKyBzcGFuU3R5bGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNwYW5TdGFydFN0eWxlLCBwb3MgKyB0b2tlblRleHQubGVu
Z3RoID09IG5leHRDaGFuZ2UgPyBzcGFuRW5kU3R5bGUgOiAiIik7CisgICAgICAgICAgfQorICAg
ICAgICAgIGlmIChlbmQgPj0gdXB0bykge3RleHQgPSB0ZXh0LnNsaWNlKHVwdG8gLSBwb3MpOyBw
b3MgPSB1cHRvOyBicmVhazt9CisgICAgICAgICAgcG9zID0gZW5kOworICAgICAgICAgIHNwYW5T
dGFydFN0eWxlID0gIiI7CisgICAgICAgIH0KKyAgICAgICAgdGV4dCA9IHN0W2krK107IHN0eWxl
ID0gc3R5bGVUb0NsYXNzKHN0W2krK10pOwogICAgICAgfQotICAgICAgcG9zID0gZW5kOwogICAg
IH0KICAgfQogCi0gIC8vIERhdGEgc3RydWN0dXJlIHRoYXQgaG9sZHMgdGhlIHNlcXVlbmNlIG9m
IGxpbmVzLgorICAvLyBET0NVTUVOVCBEQVRBIFNUUlVDVFVSRQorCiAgIGZ1bmN0aW9uIExlYWZD
aHVuayhsaW5lcykgewogICAgIHRoaXMubGluZXMgPSBsaW5lczsKICAgICB0aGlzLnBhcmVudCA9
IG51bGw7CkBAIC0yNzY0LDE1ICszNjMzLDE1IEBAIHZhciBDb2RlTWlycm9yID0gKGZ1bmN0aW9u
KCkgewogICAgIH0KICAgICB0aGlzLmhlaWdodCA9IGhlaWdodDsKICAgfQorCiAgIExlYWZDaHVu
ay5wcm90b3R5cGUgPSB7CiAgICAgY2h1bmtTaXplOiBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMu
bGluZXMubGVuZ3RoOyB9LAotICAgIHJlbW92ZTogZnVuY3Rpb24oYXQsIG4sIGNhbGxiYWNrcykg
eworICAgIHJlbW92ZTogZnVuY3Rpb24oYXQsIG4sIGNtKSB7CiAgICAgICBmb3IgKHZhciBpID0g
YXQsIGUgPSBhdCArIG47IGkgPCBlOyArK2kpIHsKICAgICAgICAgdmFyIGxpbmUgPSB0aGlzLmxp
bmVzW2ldOwogICAgICAgICB0aGlzLmhlaWdodCAtPSBsaW5lLmhlaWdodDsKLSAgICAgICAgbGlu
ZS5jbGVhblVwKCk7Ci0gICAgICAgIGlmIChsaW5lLmhhbmRsZXJzKQotICAgICAgICAgIGZvciAo
dmFyIGogPSAwOyBqIDwgbGluZS5oYW5kbGVycy5sZW5ndGg7ICsraikgY2FsbGJhY2tzLnB1c2go
bGluZS5oYW5kbGVyc1tqXSk7CisgICAgICAgIGNsZWFuVXBMaW5lKGxpbmUpOworICAgICAgICBz
aWduYWxMYXRlcihjbSwgbGluZSwgImRlbGV0ZSIpOwogICAgICAgfQogICAgICAgdGhpcy5saW5l
cy5zcGxpY2UoYXQsIG4pOwogICAgIH0sCkBAIC0yNzg5LDYgKzM2NTgsNyBAQCB2YXIgQ29kZU1p
cnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgICAgaWYgKG9wKHRoaXMubGluZXNbYXRdKSkgcmV0
dXJuIHRydWU7CiAgICAgfQogICB9OworCiAgIGZ1bmN0aW9uIEJyYW5jaENodW5rKGNoaWxkcmVu
KSB7CiAgICAgdGhpcy5jaGlsZHJlbiA9IGNoaWxkcmVuOwogICAgIHZhciBzaXplID0gMCwgaGVp
Z2h0ID0gMDsKQEAgLTI4MDEsNiArMzY3MSw3IEBAIHZhciBDb2RlTWlycm9yID0gKGZ1bmN0aW9u
KCkgewogICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0OwogICAgIHRoaXMucGFyZW50ID0gbnVsbDsK
ICAgfQorCiAgIEJyYW5jaENodW5rLnByb3RvdHlwZSA9IHsKICAgICBjaHVua1NpemU6IGZ1bmN0
aW9uKCkgeyByZXR1cm4gdGhpcy5zaXplOyB9LAogICAgIHJlbW92ZTogZnVuY3Rpb24oYXQsIG4s
IGNhbGxiYWNrcykgewpAQCAtMjg4OCw3ICszNzU5LDE0IEBAIHZhciBDb2RlTWlycm9yID0gKGZ1
bmN0aW9uKCkgewogICAgIH0KICAgfTsKIAotICBmdW5jdGlvbiBnZXRMaW5lQXQoY2h1bmssIG4p
IHsKKyAgLy8gTElORSBVVElMSVRJRVMKKworICBmdW5jdGlvbiBsaW5lRG9jKGxpbmUpIHsKKyAg
ICBmb3IgKHZhciBkID0gbGluZS5wYXJlbnQ7IGQgJiYgZC5wYXJlbnQ7IGQgPSBkLnBhcmVudCkg
e30KKyAgICByZXR1cm4gZDsKKyAgfQorCisgIGZ1bmN0aW9uIGdldExpbmUoY2h1bmssIG4pIHsK
ICAgICB3aGlsZSAoIWNodW5rLmxpbmVzKSB7CiAgICAgICBmb3IgKHZhciBpID0gMDs7ICsraSkg
ewogICAgICAgICB2YXIgY2hpbGQgPSBjaHVuay5jaGlsZHJlbltpXSwgc3ogPSBjaGlsZC5jaHVu
a1NpemUoKTsKQEAgLTI4OTgsNiArMzc3NiwxMiBAQCB2YXIgQ29kZU1pcnJvciA9IChmdW5jdGlv
bigpIHsKICAgICB9CiAgICAgcmV0dXJuIGNodW5rLmxpbmVzW25dOwogICB9CisKKyAgZnVuY3Rp
b24gdXBkYXRlTGluZUhlaWdodChsaW5lLCBoZWlnaHQpIHsKKyAgICB2YXIgZGlmZiA9IGhlaWdo
dCAtIGxpbmUuaGVpZ2h0OworICAgIGZvciAodmFyIG4gPSBsaW5lOyBuOyBuID0gbi5wYXJlbnQp
IG4uaGVpZ2h0ICs9IGRpZmY7CisgIH0KKwogICBmdW5jdGlvbiBsaW5lTm8obGluZSkgewogICAg
IGlmIChsaW5lLnBhcmVudCA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICB2YXIgY3VyID0gbGlu
ZS5wYXJlbnQsIG5vID0gaW5kZXhPZihjdXIubGluZXMsIGxpbmUpOwpAQCAtMjkwOSw2ICszNzkz
LDcgQEAgdmFyIENvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgfQogICAgIHJldHVybiBu
bzsKICAgfQorCiAgIGZ1bmN0aW9uIGxpbmVBdEhlaWdodChjaHVuaywgaCkgewogICAgIHZhciBu
ID0gMDsKICAgICBvdXRlcjogZG8gewpAQCAtMjkyNyw1OCArMzgxMiw4NCBAQCB2YXIgQ29kZU1p
cnJvciA9IChmdW5jdGlvbigpIHsKICAgICB9CiAgICAgcmV0dXJuIG4gKyBpOwogICB9Ci0gIGZ1
bmN0aW9uIGhlaWdodEF0TGluZShjaHVuaywgbikgewotICAgIHZhciBoID0gMDsKLSAgICBvdXRl
cjogZG8gewotICAgICAgZm9yICh2YXIgaSA9IDAsIGUgPSBjaHVuay5jaGlsZHJlbi5sZW5ndGg7
IGkgPCBlOyArK2kpIHsKLSAgICAgICAgdmFyIGNoaWxkID0gY2h1bmsuY2hpbGRyZW5baV0sIHN6
ID0gY2hpbGQuY2h1bmtTaXplKCk7Ci0gICAgICAgIGlmIChuIDwgc3opIHsgY2h1bmsgPSBjaGls
ZDsgY29udGludWUgb3V0ZXI7IH0KLSAgICAgICAgbiAtPSBzejsKLSAgICAgICAgaCArPSBjaGls
ZC5oZWlnaHQ7CisKKyAgZnVuY3Rpb24gaGVpZ2h0QXRMaW5lKGNtLCBsaW5lT2JqKSB7CisgICAg
dmFyIG1lcmdlZDsKKyAgICB3aGlsZSAobWVyZ2VkID0gY29sbGFwc2VkU3BhbkF0U3RhcnQobGlu
ZU9iaikpCisgICAgICBsaW5lT2JqID0gZ2V0TGluZShjbS52aWV3LmRvYywgbWVyZ2VkLmZpbmQo
KS5mcm9tLmxpbmUpOworCisgICAgdmFyIGggPSAwLCBjaHVuayA9IGxpbmVPYmoucGFyZW50Owor
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2h1bmsubGluZXMubGVuZ3RoOyArK2kpIHsKKyAgICAg
IHZhciBsaW5lID0gY2h1bmsubGluZXNbaV07CisgICAgICBpZiAobGluZSA9PSBsaW5lT2JqKSBi
cmVhazsKKyAgICAgIGVsc2UgaCArPSBsaW5lLmhlaWdodDsKKyAgICB9CisgICAgZm9yICh2YXIg
cCA9IGNodW5rLnBhcmVudDsgcDsgY2h1bmsgPSBwLCBwID0gY2h1bmsucGFyZW50KSB7CisgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IHAuY2hpbGRyZW4ubGVuZ3RoOyArK2kpIHsKKyAgICAgICAg
dmFyIGN1ciA9IHAuY2hpbGRyZW5baV07CisgICAgICAgIGlmIChjdXIgPT0gY2h1bmspIGJyZWFr
OworICAgICAgICBlbHNlIGggKz0gY3VyLmhlaWdodDsKICAgICAgIH0KLSAgICAgIHJldHVybiBo
OwotICAgIH0gd2hpbGUgKCFjaHVuay5saW5lcyk7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBu
OyArK2kpIGggKz0gY2h1bmsubGluZXNbaV0uaGVpZ2h0OworICAgIH0KICAgICByZXR1cm4gaDsK
ICAgfQogCisgIGZ1bmN0aW9uIGdldE9yZGVyKGxpbmUpIHsKKyAgICB2YXIgb3JkZXIgPSBsaW5l
Lm9yZGVyOworICAgIGlmIChvcmRlciA9PSBudWxsKSBvcmRlciA9IGxpbmUub3JkZXIgPSBiaWRp
T3JkZXJpbmcobGluZS50ZXh0KTsKKyAgICByZXR1cm4gb3JkZXI7CisgIH0KKworICAvLyBISVNU
T1JZCisKICAgLy8gVGhlIGhpc3Rvcnkgb2JqZWN0ICdjaHVua3MnIGNoYW5nZXMgdGhhdCBhcmUg
bWFkZSBjbG9zZSB0b2dldGhlcgogICAvLyBhbmQgYXQgYWxtb3N0IHRoZSBzYW1lIHRpbWUgaW50
byBiaWdnZXIgdW5kb2FibGUgdW5pdHMuCi0gIGZ1bmN0aW9uIEhpc3RvcnkoKSB7Ci0gICAgdGhp
cy50aW1lID0gMDsKLSAgICB0aGlzLmRvbmUgPSBbXTsgdGhpcy51bmRvbmUgPSBbXTsKLSAgICB0
aGlzLmNvbXBvdW5kID0gMDsKLSAgICB0aGlzLmNsb3NlZCA9IGZhbHNlOwotICB9Ci0gIEhpc3Rv
cnkucHJvdG90eXBlID0gewotICAgIGFkZENoYW5nZTogZnVuY3Rpb24oc3RhcnQsIGFkZGVkLCBv
bGQpIHsKLSAgICAgIHRoaXMudW5kb25lLmxlbmd0aCA9IDA7Ci0gICAgICB2YXIgdGltZSA9ICtu
ZXcgRGF0ZSwgY3VyID0gdGhpcy5kb25lW3RoaXMuZG9uZS5sZW5ndGggLSAxXSwgbGFzdCA9IGN1
ciAmJiBjdXJbY3VyLmxlbmd0aCAtIDFdOwotICAgICAgdmFyIGR0aW1lID0gdGltZSAtIHRoaXMu
dGltZTsKLQotICAgICAgaWYgKHRoaXMuY29tcG91bmQgJiYgY3VyICYmICF0aGlzLmNsb3NlZCkg
ewotICAgICAgICBjdXIucHVzaCh7c3RhcnQ6IHN0YXJ0LCBhZGRlZDogYWRkZWQsIG9sZDogb2xk
fSk7Ci0gICAgICB9IGVsc2UgaWYgKGR0aW1lID4gNDAwIHx8ICFsYXN0IHx8IHRoaXMuY2xvc2Vk
IHx8Ci0gICAgICAgICAgICAgICAgIGxhc3Quc3RhcnQgPiBzdGFydCArIG9sZC5sZW5ndGggfHwg
bGFzdC5zdGFydCArIGxhc3QuYWRkZWQgPCBzdGFydCkgewotICAgICAgICB0aGlzLmRvbmUucHVz
aChbe3N0YXJ0OiBzdGFydCwgYWRkZWQ6IGFkZGVkLCBvbGQ6IG9sZH1dKTsKLSAgICAgICAgdGhp
cy5jbG9zZWQgPSBmYWxzZTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHZhciBzdGFydEJlZm9y
ZSA9IE1hdGgubWF4KDAsIGxhc3Quc3RhcnQgLSBzdGFydCksCi0gICAgICAgICAgICBlbmRBZnRl
ciA9IE1hdGgubWF4KDAsIChzdGFydCArIG9sZC5sZW5ndGgpIC0gKGxhc3Quc3RhcnQgKyBsYXN0
LmFkZGVkKSk7Ci0gICAgICAgIGZvciAodmFyIGkgPSBzdGFydEJlZm9yZTsgaSA+IDA7IC0taSkg
bGFzdC5vbGQudW5zaGlmdChvbGRbaSAtIDFdKTsKLSAgICAgICAgZm9yICh2YXIgaSA9IGVuZEFm
dGVyOyBpID4gMDsgLS1pKSBsYXN0Lm9sZC5wdXNoKG9sZFtvbGQubGVuZ3RoIC0gaV0pOwotICAg
ICAgICBpZiAoc3RhcnRCZWZvcmUpIGxhc3Quc3RhcnQgPSBzdGFydDsKLSAgICAgICAgbGFzdC5h
ZGRlZCArPSBhZGRlZCAtIChvbGQubGVuZ3RoIC0gc3RhcnRCZWZvcmUgLSBlbmRBZnRlcik7Ci0g
ICAgICB9Ci0gICAgICB0aGlzLnRpbWUgPSB0aW1lOwotICAgIH0sCi0gICAgc3RhcnRDb21wb3Vu
ZDogZnVuY3Rpb24oKSB7Ci0gICAgICBpZiAoIXRoaXMuY29tcG91bmQrKykgdGhpcy5jbG9zZWQg
PSB0cnVlOwotICAgIH0sCi0gICAgZW5kQ29tcG91bmQ6IGZ1bmN0aW9uKCkgewotICAgICAgaWYg
KCEtLXRoaXMuY29tcG91bmQpIHRoaXMuY2xvc2VkID0gdHJ1ZTsKKyAgZnVuY3Rpb24gbWFrZUhp
c3RvcnkoKSB7CisgICAgcmV0dXJuIHt0aW1lOiAwLCBkb25lOiBbXSwgdW5kb25lOiBbXSwKKyAg
ICAgICAgICAgIGNvbXBvdW5kOiAwLCBjbG9zZWQ6IGZhbHNlLCBkaXJ0eUNvdW50ZXI6IDB9Owor
ICB9CisKKyAgZnVuY3Rpb24gYWRkQ2hhbmdlKGhpc3RvcnksIHN0YXJ0LCBhZGRlZCwgb2xkKSB7
CisgICAgaGlzdG9yeS51bmRvbmUubGVuZ3RoID0gMDsKKyAgICB2YXIgdGltZSA9ICtuZXcgRGF0
ZSwgY3VyID0gbHN0KGhpc3RvcnkuZG9uZSksIGxhc3QgPSBjdXIgJiYgbHN0KGN1cik7CisgICAg
dmFyIGR0aW1lID0gdGltZSAtIGhpc3RvcnkudGltZTsKKyAgICAKKyAgICBmdW5jdGlvbiB1cGRh
dGVEaXJ0eSgpIHsKKyAgICAgIGlmIChoaXN0b3J5LmRpcnR5Q291bnRlciA8IDApIHsKKyAgICAg
ICAgICAvLyBUaGUgdXNlciBoYXMgbWFkZSBhIGNoYW5nZSBhZnRlciB1bmRvaW5nIHBhc3QgdGhl
IGxhc3QgY2xlYW4gc3RhdGUuIAorICAgICAgICAgIC8vIFdlIGNhbiBuZXZlciBnZXQgYmFjayB0
byBhIGNsZWFuIHN0YXRlIG5vdyB1bnRpbCBtYXJrQ2xlYW4oKSBpcyBjYWxsZWQuCisgICAgICAg
ICAgaGlzdG9yeS5kaXJ0eUNvdW50ZXIgPSBOYU47CisgICAgICB9CisgICAgICBoaXN0b3J5LmRp
cnR5Q291bnRlcisrOwogICAgIH0KLSAgfTsKKworICAgIGlmIChjdXIgJiYgIWhpc3RvcnkuY2xv
c2VkICYmIGhpc3RvcnkuY29tcG91bmQpIHsKKyAgICAgIHVwZGF0ZURpcnR5KCk7CisgICAgICBj
dXIucHVzaCh7c3RhcnQ6IHN0YXJ0LCBhZGRlZDogYWRkZWQsIG9sZDogb2xkfSk7CisgICAgfSBl
bHNlIGlmIChkdGltZSA+IDQwMCB8fCAhbGFzdCB8fCBoaXN0b3J5LmNsb3NlZCB8fAorICAgICAg
ICAgICAgICAgbGFzdC5zdGFydCA+IHN0YXJ0ICsgb2xkLmxlbmd0aCB8fCBsYXN0LnN0YXJ0ICsg
bGFzdC5hZGRlZCA8IHN0YXJ0KSB7CisgICAgICB1cGRhdGVEaXJ0eSgpOworICAgICAgaGlzdG9y
eS5kb25lLnB1c2goW3tzdGFydDogc3RhcnQsIGFkZGVkOiBhZGRlZCwgb2xkOiBvbGR9XSk7Cisg
ICAgICBoaXN0b3J5LmNsb3NlZCA9IGZhbHNlOworICAgIH0gZWxzZSB7CisgICAgICB2YXIgc3Rh
cnRCZWZvcmUgPSBNYXRoLm1heCgwLCBsYXN0LnN0YXJ0IC0gc3RhcnQpLAorICAgICAgZW5kQWZ0
ZXIgPSBNYXRoLm1heCgwLCAoc3RhcnQgKyBvbGQubGVuZ3RoKSAtIChsYXN0LnN0YXJ0ICsgbGFz
dC5hZGRlZCkpOworICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0QmVmb3JlOyBpID4gMDsgLS1pKSBs
YXN0Lm9sZC51bnNoaWZ0KG9sZFtpIC0gMV0pOworICAgICAgZm9yICh2YXIgaSA9IGVuZEFmdGVy
OyBpID4gMDsgLS1pKSBsYXN0Lm9sZC5wdXNoKG9sZFtvbGQubGVuZ3RoIC0gaV0pOworICAgICAg
aWYgKHN0YXJ0QmVmb3JlKSBsYXN0LnN0YXJ0ID0gc3RhcnQ7CisgICAgICBsYXN0LmFkZGVkICs9
IGFkZGVkIC0gKG9sZC5sZW5ndGggLSBzdGFydEJlZm9yZSAtIGVuZEFmdGVyKTsKKyAgICB9Cisg
ICAgaGlzdG9yeS50aW1lID0gdGltZTsKKyAgfQorCisgIGZ1bmN0aW9uIGNvbXBvdW5kQ2hhbmdl
KGNtLCBmKSB7CisgICAgdmFyIGhpc3QgPSBjbS52aWV3Lmhpc3Rvcnk7CisgICAgaWYgKCFoaXN0
LmNvbXBvdW5kKyspIGhpc3QuY2xvc2VkID0gdHJ1ZTsKKyAgICB0cnkgeyByZXR1cm4gZigpOyB9
CisgICAgZmluYWxseSB7IGlmICghLS1oaXN0LmNvbXBvdW5kKSBoaXN0LmNsb3NlZCA9IHRydWU7
IH0KKyAgfQorCisgIC8vIEVWRU5UIE9QRVJBVE9SUwogCiAgIGZ1bmN0aW9uIHN0b3BNZXRob2Qo
KSB7ZV9zdG9wKHRoaXMpO30KICAgLy8gRW5zdXJlIGFuIGV2ZW50IGhhcyBhIHN0b3AgbWV0aG9k
LgpAQCAtMzAxOSw1MyArMzkzMCw2OCBAQCB2YXIgQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsK
ICAgICByZXR1cm4gb3ZlcnJpZGRlbiA/IGUub3ZlcnJpZGVbcHJvcF0gOiBlW3Byb3BdOwogICB9
CiAKLSAgLy8gRXZlbnQgaGFuZGxlciByZWdpc3RyYXRpb24uIElmIGRpc2Nvbm5lY3QgaXMgdHJ1
ZSwgaXQnbGwgcmV0dXJuIGEKLSAgLy8gZnVuY3Rpb24gdGhhdCB1bnJlZ2lzdGVycyB0aGUgaGFu
ZGxlci4KLSAgZnVuY3Rpb24gY29ubmVjdChub2RlLCB0eXBlLCBoYW5kbGVyLCBkaXNjb25uZWN0
KSB7Ci0gICAgaWYgKHR5cGVvZiBub2RlLmFkZEV2ZW50TGlzdGVuZXIgPT0gImZ1bmN0aW9uIikg
ewotICAgICAgbm9kZS5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGhhbmRsZXIsIGZhbHNlKTsKLSAg
ICAgIGlmIChkaXNjb25uZWN0KSByZXR1cm4gZnVuY3Rpb24oKSB7bm9kZS5yZW1vdmVFdmVudExp
c3RlbmVyKHR5cGUsIGhhbmRsZXIsIGZhbHNlKTt9OwotICAgIH0gZWxzZSB7Ci0gICAgICB2YXIg
d3JhcEhhbmRsZXIgPSBmdW5jdGlvbihldmVudCkge2hhbmRsZXIoZXZlbnQgfHwgd2luZG93LmV2
ZW50KTt9OwotICAgICAgbm9kZS5hdHRhY2hFdmVudCgib24iICsgdHlwZSwgd3JhcEhhbmRsZXIp
OwotICAgICAgaWYgKGRpc2Nvbm5lY3QpIHJldHVybiBmdW5jdGlvbigpIHtub2RlLmRldGFjaEV2
ZW50KCJvbiIgKyB0eXBlLCB3cmFwSGFuZGxlcik7fTsKKyAgLy8gRVZFTlQgSEFORExJTkcKKwor
ICBmdW5jdGlvbiBvbihlbWl0dGVyLCB0eXBlLCBmKSB7CisgICAgaWYgKGVtaXR0ZXIuYWRkRXZl
bnRMaXN0ZW5lcikKKyAgICAgIGVtaXR0ZXIuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBmLCBmYWxz
ZSk7CisgICAgZWxzZSBpZiAoZW1pdHRlci5hdHRhY2hFdmVudCkKKyAgICAgIGVtaXR0ZXIuYXR0
YWNoRXZlbnQoIm9uIiArIHR5cGUsIGYpOworICAgIGVsc2UgeworICAgICAgdmFyIG1hcCA9IGVt
aXR0ZXIuX2hhbmRsZXJzIHx8IChlbWl0dGVyLl9oYW5kbGVycyA9IHt9KTsKKyAgICAgIHZhciBh
cnIgPSBtYXBbdHlwZV0gfHwgKG1hcFt0eXBlXSA9IFtdKTsKKyAgICAgIGFyci5wdXNoKGYpOwog
ICAgIH0KICAgfQotICBDb2RlTWlycm9yLmNvbm5lY3QgPSBjb25uZWN0OwogCi0gIGZ1bmN0aW9u
IERlbGF5ZWQoKSB7dGhpcy5pZCA9IG51bGw7fQotICBEZWxheWVkLnByb3RvdHlwZSA9IHtzZXQ6
IGZ1bmN0aW9uKG1zLCBmKSB7Y2xlYXJUaW1lb3V0KHRoaXMuaWQpOyB0aGlzLmlkID0gc2V0VGlt
ZW91dChmLCBtcyk7fX07CisgIGZ1bmN0aW9uIG9mZihlbWl0dGVyLCB0eXBlLCBmKSB7CisgICAg
aWYgKGVtaXR0ZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcikKKyAgICAgIGVtaXR0ZXIucmVtb3ZlRXZl
bnRMaXN0ZW5lcih0eXBlLCBmLCBmYWxzZSk7CisgICAgZWxzZSBpZiAoZW1pdHRlci5kZXRhY2hF
dmVudCkKKyAgICAgIGVtaXR0ZXIuZGV0YWNoRXZlbnQoIm9uIiArIHR5cGUsIGYpOworICAgIGVs
c2UgeworICAgICAgdmFyIGFyciA9IGVtaXR0ZXIuX2hhbmRsZXJzICYmIGVtaXR0ZXIuX2hhbmRs
ZXJzW3R5cGVdOworICAgICAgaWYgKCFhcnIpIHJldHVybjsKKyAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgYXJyLmxlbmd0aDsgKytpKQorICAgICAgICBpZiAoYXJyW2ldID09IGYpIHsgYXJyLnNw
bGljZShpLCAxKTsgYnJlYWs7IH0KKyAgICB9CisgIH0KIAotICB2YXIgUGFzcyA9IENvZGVNaXJy
b3IuUGFzcyA9IHt0b1N0cmluZzogZnVuY3Rpb24oKXtyZXR1cm4gIkNvZGVNaXJyb3IuUGFzcyI7
fX07CisgIGZ1bmN0aW9uIHNpZ25hbChlbWl0dGVyLCB0eXBlIC8qLCB2YWx1ZXMuLi4qLykgewor
ICAgIHZhciBhcnIgPSBlbWl0dGVyLl9oYW5kbGVycyAmJiBlbWl0dGVyLl9oYW5kbGVyc1t0eXBl
XTsKKyAgICBpZiAoIWFycikgcmV0dXJuOworICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBl
LnNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5s
ZW5ndGg7ICsraSkgYXJyW2ldLmFwcGx5KG51bGwsIGFyZ3MpOworICB9CiAKLSAgLy8gRGV0ZWN0
IGRyYWctYW5kLWRyb3AKLSAgdmFyIGRyYWdBbmREcm9wID0gZnVuY3Rpb24oKSB7Ci0gICAgLy8g
VGhlcmUgaXMgKnNvbWUqIGtpbmQgb2YgZHJhZy1hbmQtZHJvcCBzdXBwb3J0IGluIElFNi04LCBi
dXQgSQotICAgIC8vIGNvdWxkbid0IGdldCBpdCB0byB3b3JrIHlldC4KLSAgICBpZiAoaWVfbHQ5
KSByZXR1cm4gZmFsc2U7Ci0gICAgdmFyIGRpdiA9IGVsdCgnZGl2Jyk7Ci0gICAgcmV0dXJuICJk
cmFnZ2FibGUiIGluIGRpdiB8fCAiZHJhZ0Ryb3AiIGluIGRpdjsKLSAgfSgpOworICBmdW5jdGlv
biBzaWduYWxMYXRlcihjbSwgZW1pdHRlciwgdHlwZSAvKiwgdmFsdWVzLi4uKi8pIHsKKyAgICB2
YXIgYXJyID0gZW1pdHRlci5faGFuZGxlcnMgJiYgZW1pdHRlci5faGFuZGxlcnNbdHlwZV07Cisg
ICAgaWYgKCFhcnIpIHJldHVybjsKKyAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGlj
ZS5jYWxsKGFyZ3VtZW50cywgMyksIGZsaXN0ID0gY20uY3VyT3AgJiYgY20uY3VyT3AuZGVsYXll
ZENhbGxiYWNrczsKKyAgICBmdW5jdGlvbiBibmQoZikge3JldHVybiBmdW5jdGlvbigpe2YuYXBw
bHkobnVsbCwgYXJncyk7fTt9OworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsg
KytpKQorICAgICAgaWYgKGZsaXN0KSBmbGlzdC5wdXNoKGJuZChhcnJbaV0pKTsKKyAgICAgIGVs
c2UgYXJyW2ldLmFwcGx5KG51bGwsIGFyZ3MpOworICB9CiAKLSAgLy8gRmVhdHVyZS1kZXRlY3Qg
d2hldGhlciBuZXdsaW5lcyBpbiB0ZXh0YXJlYXMgYXJlIGNvbnZlcnRlZCB0byBcclxuCi0gIHZh
ciBsaW5lU2VwID0gZnVuY3Rpb24gKCkgewotICAgIHZhciB0ZSA9IGVsdCgidGV4dGFyZWEiKTsK
LSAgICB0ZS52YWx1ZSA9ICJmb29cbmJhciI7Ci0gICAgaWYgKHRlLnZhbHVlLmluZGV4T2YoIlxy
IikgPiAtMSkgcmV0dXJuICJcclxuIjsKLSAgICByZXR1cm4gIlxuIjsKLSAgfSgpOworICBmdW5j
dGlvbiBoYXNIYW5kbGVyKGVtaXR0ZXIsIHR5cGUpIHsKKyAgICB2YXIgYXJyID0gZW1pdHRlci5f
aGFuZGxlcnMgJiYgZW1pdHRlci5faGFuZGxlcnNbdHlwZV07CisgICAgcmV0dXJuIGFyciAmJiBh
cnIubGVuZ3RoID4gMDsKKyAgfQogCi0gIC8vIEZvciBhIHJlYXNvbiBJIGhhdmUgeWV0IHRvIGZp
Z3VyZSBvdXQsIHNvbWUgYnJvd3NlcnMgZGlzYWxsb3cKLSAgLy8gd29yZCB3cmFwcGluZyBiZXR3
ZWVuIGNlcnRhaW4gY2hhcmFjdGVycyAqb25seSogaWYgYSBuZXcgaW5saW5lCi0gIC8vIGVsZW1l
bnQgaXMgc3RhcnRlZCBiZXR3ZWVuIHRoZW0uIFRoaXMgbWFrZXMgaXQgaGFyZCB0byByZWxpYWJs
eQotICAvLyBtZWFzdXJlIHRoZSBwb3NpdGlvbiBvZiB0aGluZ3MsIHNpbmNlIHRoYXQgcmVxdWly
ZXMgaW5zZXJ0aW5nIGFuCi0gIC8vIGV4dHJhIHNwYW4uIFRoaXMgdGVycmlibHkgZnJhZ2lsZSBz
ZXQgb2YgcmVnZXhwcyBtYXRjaGVzIHRoZQotICAvLyBjaGFyYWN0ZXIgY29tYmluYXRpb25zIHRo
YXQgc3VmZmVyIGZyb20gdGhpcyBwaGVub21lbm9uIG9uIHRoZQotICAvLyB2YXJpb3VzIGJyb3dz
ZXJzLgotICB2YXIgc3BhbkFmZmVjdHNXcmFwcGluZyA9IC9eJC87IC8vIFdvbid0IG1hdGNoIGFu
eSB0d28tY2hhcmFjdGVyIHN0cmluZwotICBpZiAoZ2Vja28pIHNwYW5BZmZlY3RzV3JhcHBpbmcg
PSAvJCcvOwotICBlbHNlIGlmIChzYWZhcmkpIHNwYW5BZmZlY3RzV3JhcHBpbmcgPSAvXC1bXiBc
LT9dfFw/W14gISdcIlwpLC5cLVwvOjtcP1xdXH1dLzsKLSAgZWxzZSBpZiAoY2hyb21lKSBzcGFu
QWZmZWN0c1dyYXBwaW5nID0gL1wtW14gXC1cLj9dfFw/W14gXC1cLj9cXVx9OjshJ1wiXCksXC9d
fFtcLiFcIiMmJVwpKissOjs9PlxdfFx9fl1bXChce1xbPF18XCQnLzsKKyAgQ29kZU1pcnJvci5v
biA9IG9uOyBDb2RlTWlycm9yLm9mZiA9IG9mZjsgQ29kZU1pcnJvci5zaWduYWwgPSBzaWduYWw7
CisKKyAgLy8gTUlTQyBVVElMSVRJRVMKKworICAvLyBOdW1iZXIgb2YgcGl4ZWxzIGFkZGVkIHRv
IHNjcm9sbGVyIGFuZCBzaXplciB0byBoaWRlIHNjcm9sbGJhcgorICB2YXIgc2Nyb2xsZXJDdXRP
ZmYgPSAzMDsKKworICAvLyBSZXR1cm5lZCBvciB0aHJvd24gYnkgdmFyaW91cyBwcm90b2NvbHMg
dG8gc2lnbmFsICdJJ20gbm90CisgIC8vIGhhbmRsaW5nIHRoaXMnLgorICB2YXIgUGFzcyA9IENv
ZGVNaXJyb3IuUGFzcyA9IHt0b1N0cmluZzogZnVuY3Rpb24oKXtyZXR1cm4gIkNvZGVNaXJyb3Iu
UGFzcyI7fX07CisKKyAgZnVuY3Rpb24gRGVsYXllZCgpIHt0aGlzLmlkID0gbnVsbDt9CisgIERl
bGF5ZWQucHJvdG90eXBlID0ge3NldDogZnVuY3Rpb24obXMsIGYpIHtjbGVhclRpbWVvdXQodGhp
cy5pZCk7IHRoaXMuaWQgPSBzZXRUaW1lb3V0KGYsIG1zKTt9fTsKIAogICAvLyBDb3VudHMgdGhl
IGNvbHVtbiBvZmZzZXQgaW4gYSBzdHJpbmcsIHRha2luZyB0YWJzIGludG8gYWNjb3VudC4KICAg
Ly8gVXNlZCBtb3N0bHkgdG8gZmluZCBpbmRlbnRhdGlvbi4KQEAgLTMwODAsMzQgKzQwMDYsMTcg
QEAgdmFyIENvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgfQogICAgIHJldHVybiBuOwog
ICB9CisgIENvZGVNaXJyb3IuY291bnRDb2x1bW4gPSBjb3VudENvbHVtbjsKIAotICBmdW5jdGlv
biBjb21wdXRlZFN0eWxlKGVsdCkgewotICAgIGlmIChlbHQuY3VycmVudFN0eWxlKSByZXR1cm4g
ZWx0LmN1cnJlbnRTdHlsZTsKLSAgICByZXR1cm4gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWx0
LCBudWxsKTsKKyAgdmFyIHNwYWNlU3RycyA9IFsiIl07CisgIGZ1bmN0aW9uIHNwYWNlU3RyKG4p
IHsKKyAgICB3aGlsZSAoc3BhY2VTdHJzLmxlbmd0aCA8PSBuKQorICAgICAgc3BhY2VTdHJzLnB1
c2gobHN0KHNwYWNlU3RycykgKyAiICIpOworICAgIHJldHVybiBzcGFjZVN0cnNbbl07CiAgIH0K
IAotICBmdW5jdGlvbiBlbHRPZmZzZXQobm9kZSwgc2NyZWVuKSB7Ci0gICAgLy8gVGFrZSB0aGUg
cGFydHMgb2YgYm91bmRpbmcgY2xpZW50IHJlY3QgdGhhdCB3ZSBhcmUgaW50ZXJlc3RlZCBpbiBz
byB3ZSBhcmUgYWJsZSB0byBlZGl0IGlmIG5lZWQgYmUsCi0gICAgLy8gc2luY2UgdGhlIHJldHVy
bmVkIHZhbHVlIGNhbm5vdCBiZSBjaGFuZ2VkIGV4dGVybmFsbHkgKHRoZXkgYXJlIGtlcHQgaW4g
c3luYyBhcyB0aGUgZWxlbWVudCBtb3ZlcyB3aXRoaW4gdGhlIHBhZ2UpCi0gICAgdHJ5IHsgdmFy
IGJveCA9IG5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7IGJveCA9IHsgdG9wOiBib3gudG9w
LCBsZWZ0OiBib3gubGVmdCB9OyB9Ci0gICAgY2F0Y2goZSkgeyBib3ggPSB7dG9wOiAwLCBsZWZ0
OiAwfTsgfQotICAgIGlmICghc2NyZWVuKSB7Ci0gICAgICAvLyBHZXQgdGhlIHRvcGxldmVsIHNj
cm9sbCwgd29ya2luZyBhcm91bmQgYnJvd3NlciBkaWZmZXJlbmNlcy4KLSAgICAgIGlmICh3aW5k
b3cucGFnZVlPZmZzZXQgPT0gbnVsbCkgewotICAgICAgICB2YXIgdCA9IGRvY3VtZW50LmRvY3Vt
ZW50RWxlbWVudCB8fCBkb2N1bWVudC5ib2R5LnBhcmVudE5vZGU7Ci0gICAgICAgIGlmICh0LnNj
cm9sbFRvcCA9PSBudWxsKSB0ID0gZG9jdW1lbnQuYm9keTsKLSAgICAgICAgYm94LnRvcCArPSB0
LnNjcm9sbFRvcDsgYm94LmxlZnQgKz0gdC5zY3JvbGxMZWZ0OwotICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgYm94LnRvcCArPSB3aW5kb3cucGFnZVlPZmZzZXQ7IGJveC5sZWZ0ICs9IHdpbmRvdy5w
YWdlWE9mZnNldDsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGJveDsKLSAgfQorICBmdW5j
dGlvbiBsc3QoYXJyKSB7IHJldHVybiBhcnJbYXJyLmxlbmd0aC0xXTsgfQogCi0gIC8vIEdldCBh
IG5vZGUncyB0ZXh0IGNvbnRlbnQuCi0gIGZ1bmN0aW9uIGVsdFRleHQobm9kZSkgewotICAgIHJl
dHVybiBub2RlLnRleHRDb250ZW50IHx8IG5vZGUuaW5uZXJUZXh0IHx8IG5vZGUubm9kZVZhbHVl
IHx8ICIiOwotICB9CiAgIGZ1bmN0aW9uIHNlbGVjdElucHV0KG5vZGUpIHsKICAgICBpZiAoaW9z
KSB7IC8vIE1vYmlsZSBTYWZhcmkgYXBwYXJlbnRseSBoYXMgYSBidWcgd2hlcmUgc2VsZWN0KCkg
aXMgYnJva2VuLgogICAgICAgbm9kZS5zZWxlY3Rpb25TdGFydCA9IDA7CkBAIC0zMTE1LDEwICs0
MDI0LDQ4IEBAIHZhciBDb2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIH0gZWxzZSBub2Rl
LnNlbGVjdCgpOwogICB9CiAKLSAgLy8gT3BlcmF0aW9ucyBvbiB7bGluZSwgY2h9IG9iamVjdHMu
Ci0gIGZ1bmN0aW9uIHBvc0VxKGEsIGIpIHtyZXR1cm4gYS5saW5lID09IGIubGluZSAmJiBhLmNo
ID09IGIuY2g7fQotICBmdW5jdGlvbiBwb3NMZXNzKGEsIGIpIHtyZXR1cm4gYS5saW5lIDwgYi5s
aW5lIHx8IChhLmxpbmUgPT0gYi5saW5lICYmIGEuY2ggPCBiLmNoKTt9Ci0gIGZ1bmN0aW9uIGNv
cHlQb3MoeCkge3JldHVybiB7bGluZTogeC5saW5lLCBjaDogeC5jaH07fQorICAvLyBVc2VkIHRv
IHBvc2l0aW9uIHRoZSBjdXJzb3IgYWZ0ZXIgYW4gdW5kby9yZWRvIGJ5IGZpbmRpbmcgdGhlCisg
IC8vIGxhc3QgZWRpdGVkIGNoYXJhY3Rlci4KKyAgZnVuY3Rpb24gZWRpdEVuZChmcm9tLCB0bykg
eworICAgIGlmICghdG8pIHJldHVybiAwOworICAgIGlmICghZnJvbSkgcmV0dXJuIHRvLmxlbmd0
aDsKKyAgICBmb3IgKHZhciBpID0gZnJvbS5sZW5ndGgsIGogPSB0by5sZW5ndGg7IGkgPj0gMCAm
JiBqID49IDA7IC0taSwgLS1qKQorICAgICAgaWYgKGZyb20uY2hhckF0KGkpICE9IHRvLmNoYXJB
dChqKSkgYnJlYWs7CisgICAgcmV0dXJuIGogKyAxOworICB9CisKKyAgZnVuY3Rpb24gaW5kZXhP
Zihjb2xsZWN0aW9uLCBlbHQpIHsKKyAgICBpZiAoY29sbGVjdGlvbi5pbmRleE9mKSByZXR1cm4g
Y29sbGVjdGlvbi5pbmRleE9mKGVsdCk7CisgICAgZm9yICh2YXIgaSA9IDAsIGUgPSBjb2xsZWN0
aW9uLmxlbmd0aDsgaSA8IGU7ICsraSkKKyAgICAgIGlmIChjb2xsZWN0aW9uW2ldID09IGVsdCkg
cmV0dXJuIGk7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgZnVuY3Rpb24gZW1wdHlBcnJheShz
aXplKSB7CisgICAgZm9yICh2YXIgYSA9IFtdLCBpID0gMDsgaSA8IHNpemU7ICsraSkgYS5wdXNo
KHVuZGVmaW5lZCk7CisgICAgcmV0dXJuIGE7CisgIH0KKworICBmdW5jdGlvbiBiaW5kKGYpIHsK
KyAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7
CisgICAgcmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGYuYXBwbHkobnVsbCwgYXJncyk7fTsKKyAg
fQorCisgIHZhciBub25BU0NJSVNpbmdsZUNhc2VXb3JkQ2hhciA9IC9bXHUzMDQwLVx1MzA5Zlx1
MzBhMC1cdTMwZmZcdTM0MDAtXHU0ZGI1XHU0ZTAwLVx1OWZjY10vOworICBmdW5jdGlvbiBpc1dv
cmRDaGFyKGNoKSB7CisgICAgcmV0dXJuIC9cdy8udGVzdChjaCkgfHwgY2ggPiAiXHg4MCIgJiYK
KyAgICAgIChjaC50b1VwcGVyQ2FzZSgpICE9IGNoLnRvTG93ZXJDYXNlKCkgfHwgbm9uQVNDSUlT
aW5nbGVDYXNlV29yZENoYXIudGVzdChjaCkpOworICB9CisKKyAgZnVuY3Rpb24gaXNFbXB0eShv
YmopIHsKKyAgICB2YXIgYyA9IDA7CisgICAgZm9yICh2YXIgbiBpbiBvYmopIGlmIChvYmouaGFz
T3duUHJvcGVydHkobikgJiYgb2JqW25dKSArK2M7CisgICAgcmV0dXJuICFjOworICB9CisKKyAg
dmFyIGlzRXh0ZW5kaW5nQ2hhciA9IC9bXHUwMzAwLVx1MDM2Rlx1MDQ4My1cdTA0ODdcdTA0ODgt
XHUwNDg5XHUwNTkxLVx1MDVCRFx1MDVCRlx1MDVDMS1cdTA1QzJcdTA1QzQtXHUwNUM1XHUwNUM3
XHUwNjEwLVx1MDYxQVx1MDY0Qi1cdTA2NUZcdTA2NzBcdTA2RDYtXHUwNkRDXHUwNkRGLVx1MDZF
NFx1MDZFNy1cdTA2RThcdTA2RUEtXHUwNkVEXHVBNjZGXHVBNjcwLVx1QTY3Mlx1QTY3NC1cdUE2
N0RcdUE2OUZdLzsKKworICAvLyBET00gVVRJTElUSUVTCiAKICAgZnVuY3Rpb24gZWx0KHRhZywg
Y29udGVudCwgY2xhc3NOYW1lLCBzdHlsZSkgewogICAgIHZhciBlID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCh0YWcpOwpAQCAtMzEyOCwzOSArNDA3NSw2MiBAQCB2YXIgQ29kZU1pcnJvciA9IChm
dW5jdGlvbigpIHsKICAgICBlbHNlIGlmIChjb250ZW50KSBmb3IgKHZhciBpID0gMDsgaSA8IGNv
bnRlbnQubGVuZ3RoOyArK2kpIGUuYXBwZW5kQ2hpbGQoY29udGVudFtpXSk7CiAgICAgcmV0dXJu
IGU7CiAgIH0KKwogICBmdW5jdGlvbiByZW1vdmVDaGlsZHJlbihlKSB7CiAgICAgZS5pbm5lckhU
TUwgPSAiIjsKICAgICByZXR1cm4gZTsKICAgfQorCiAgIGZ1bmN0aW9uIHJlbW92ZUNoaWxkcmVu
QW5kQWRkKHBhcmVudCwgZSkgewotICAgIHJlbW92ZUNoaWxkcmVuKHBhcmVudCkuYXBwZW5kQ2hp
bGQoZSk7CisgICAgcmV0dXJuIHJlbW92ZUNoaWxkcmVuKHBhcmVudCkuYXBwZW5kQ2hpbGQoZSk7
CiAgIH0KKwogICBmdW5jdGlvbiBzZXRUZXh0Q29udGVudChlLCBzdHIpIHsKICAgICBpZiAoaWVf
bHQ5KSB7CiAgICAgICBlLmlubmVySFRNTCA9ICIiOwogICAgICAgZS5hcHBlbmRDaGlsZChkb2N1
bWVudC5jcmVhdGVUZXh0Tm9kZShzdHIpKTsKICAgICB9IGVsc2UgZS50ZXh0Q29udGVudCA9IHN0
cjsKICAgfQotICBDb2RlTWlycm9yLnNldFRleHRDb250ZW50ID0gc2V0VGV4dENvbnRlbnQ7CiAK
LSAgLy8gVXNlZCB0byBwb3NpdGlvbiB0aGUgY3Vyc29yIGFmdGVyIGFuIHVuZG8vcmVkbyBieSBm
aW5kaW5nIHRoZQotICAvLyBsYXN0IGVkaXRlZCBjaGFyYWN0ZXIuCi0gIGZ1bmN0aW9uIGVkaXRF
bmQoZnJvbSwgdG8pIHsKLSAgICBpZiAoIXRvKSByZXR1cm4gMDsKLSAgICBpZiAoIWZyb20pIHJl
dHVybiB0by5sZW5ndGg7Ci0gICAgZm9yICh2YXIgaSA9IGZyb20ubGVuZ3RoLCBqID0gdG8ubGVu
Z3RoOyBpID49IDAgJiYgaiA+PSAwOyAtLWksIC0taikKLSAgICAgIGlmIChmcm9tLmNoYXJBdChp
KSAhPSB0by5jaGFyQXQoaikpIGJyZWFrOwotICAgIHJldHVybiBqICsgMTsKLSAgfQorICAvLyBG
RUFUVVJFIERFVEVDVElPTgogCi0gIGZ1bmN0aW9uIGluZGV4T2YoY29sbGVjdGlvbiwgZWx0KSB7
Ci0gICAgaWYgKGNvbGxlY3Rpb24uaW5kZXhPZikgcmV0dXJuIGNvbGxlY3Rpb24uaW5kZXhPZihl
bHQpOwotICAgIGZvciAodmFyIGkgPSAwLCBlID0gY29sbGVjdGlvbi5sZW5ndGg7IGkgPCBlOyAr
K2kpCi0gICAgICBpZiAoY29sbGVjdGlvbltpXSA9PSBlbHQpIHJldHVybiBpOwotICAgIHJldHVy
biAtMTsKLSAgfQotICBmdW5jdGlvbiBpc1dvcmRDaGFyKGNoKSB7Ci0gICAgcmV0dXJuIC9cdy8u
dGVzdChjaCkgfHwgY2gudG9VcHBlckNhc2UoKSAhPSBjaC50b0xvd2VyQ2FzZSgpOworICAvLyBE
ZXRlY3QgZHJhZy1hbmQtZHJvcAorICB2YXIgZHJhZ0FuZERyb3AgPSBmdW5jdGlvbigpIHsKKyAg
ICAvLyBUaGVyZSBpcyAqc29tZSoga2luZCBvZiBkcmFnLWFuZC1kcm9wIHN1cHBvcnQgaW4gSUU2
LTgsIGJ1dCBJCisgICAgLy8gY291bGRuJ3QgZ2V0IGl0IHRvIHdvcmsgeWV0LgorICAgIGlmIChp
ZV9sdDkpIHJldHVybiBmYWxzZTsKKyAgICB2YXIgZGl2ID0gZWx0KCdkaXYnKTsKKyAgICByZXR1
cm4gImRyYWdnYWJsZSIgaW4gZGl2IHx8ICJkcmFnRHJvcCIgaW4gZGl2OworICB9KCk7CisKKyAg
Ly8gRmVhdHVyZS1kZXRlY3Qgd2hldGhlciBuZXdsaW5lcyBpbiB0ZXh0YXJlYXMgYXJlIGNvbnZl
cnRlZCB0byBcclxuCisgIHZhciBsaW5lU2VwID0gZnVuY3Rpb24gKCkgeworICAgIHZhciB0ZSA9
IGVsdCgidGV4dGFyZWEiKTsKKyAgICB0ZS52YWx1ZSA9ICJmb29cbmJhciI7CisgICAgaWYgKHRl
LnZhbHVlLmluZGV4T2YoIlxyIikgPiAtMSkgcmV0dXJuICJcclxuIjsKKyAgICByZXR1cm4gIlxu
IjsKKyAgfSgpOworCisgIC8vIEZvciBhIHJlYXNvbiBJIGhhdmUgeWV0IHRvIGZpZ3VyZSBvdXQs
IHNvbWUgYnJvd3NlcnMgZGlzYWxsb3cKKyAgLy8gd29yZCB3cmFwcGluZyBiZXR3ZWVuIGNlcnRh
aW4gY2hhcmFjdGVycyAqb25seSogaWYgYSBuZXcgaW5saW5lCisgIC8vIGVsZW1lbnQgaXMgc3Rh
cnRlZCBiZXR3ZWVuIHRoZW0uIFRoaXMgbWFrZXMgaXQgaGFyZCB0byByZWxpYWJseQorICAvLyBt
ZWFzdXJlIHRoZSBwb3NpdGlvbiBvZiB0aGluZ3MsIHNpbmNlIHRoYXQgcmVxdWlyZXMgaW5zZXJ0
aW5nIGFuCisgIC8vIGV4dHJhIHNwYW4uIFRoaXMgdGVycmlibHkgZnJhZ2lsZSBzZXQgb2YgcmVn
ZXhwcyBtYXRjaGVzIHRoZQorICAvLyBjaGFyYWN0ZXIgY29tYmluYXRpb25zIHRoYXQgc3VmZmVy
IGZyb20gdGhpcyBwaGVub21lbm9uIG9uIHRoZQorICAvLyB2YXJpb3VzIGJyb3dzZXJzLgorICB2
YXIgc3BhbkFmZmVjdHNXcmFwcGluZyA9IC9eJC87IC8vIFdvbid0IG1hdGNoIGFueSB0d28tY2hh
cmFjdGVyIHN0cmluZworICBpZiAoZ2Vja28pIHNwYW5BZmZlY3RzV3JhcHBpbmcgPSAvJCcvOwor
ICBlbHNlIGlmIChzYWZhcmkpIHNwYW5BZmZlY3RzV3JhcHBpbmcgPSAvXC1bXiBcLT9dfFw/W14g
ISdcIlwpLC5cLVwvOjtcP1xdXH1dLzsKKyAgZWxzZSBpZiAoY2hyb21lKSBzcGFuQWZmZWN0c1dy
YXBwaW5nID0gL1wtW14gXC1cLj9dfFw/W14gXC1cLj9cXVx9OjshJ1wiXCksXC9dfFtcLiFcIiMm
JVwpKissOjs9PlxdfFx9fl1bXChce1xbPF18XCQnLzsKKworICB2YXIga25vd25TY3JvbGxiYXJX
aWR0aDsKKyAgZnVuY3Rpb24gc2Nyb2xsYmFyV2lkdGgobWVhc3VyZSkgeworICAgIGlmIChrbm93
blNjcm9sbGJhcldpZHRoICE9IG51bGwpIHJldHVybiBrbm93blNjcm9sbGJhcldpZHRoOworICAg
IHZhciB0ZXN0ID0gZWx0KCJkaXYiLCBudWxsLCBudWxsLCAid2lkdGg6IDUwcHg7IGhlaWdodDog
NTBweDsgb3ZlcmZsb3cteDogc2Nyb2xsIik7CisgICAgcmVtb3ZlQ2hpbGRyZW5BbmRBZGQobWVh
c3VyZSwgdGVzdCk7CisgICAgaWYgKHRlc3Qub2Zmc2V0V2lkdGgpCisgICAgICBrbm93blNjcm9s
bGJhcldpZHRoID0gdGVzdC5vZmZzZXRIZWlnaHQgLSB0ZXN0LmNsaWVudEhlaWdodDsKKyAgICBy
ZXR1cm4ga25vd25TY3JvbGxiYXJXaWR0aCB8fCAwOwogICB9CiAKICAgLy8gU2VlIGlmICIiLnNw
bGl0IGlzIHRoZSBicm9rZW4gSUUgdmVyc2lvbiwgaWYgc28sIHByb3ZpZGUgYW4KQEAgLTMxOTQs
MTAgKzQxNjQsMTQgQEAgdmFyIENvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgcmV0dXJu
IHJhbmdlLmNvbXBhcmVFbmRQb2ludHMoIlN0YXJ0VG9FbmQiLCByYW5nZSkgIT0gMDsKICAgfTsK
IAotICBDb2RlTWlycm9yLmRlZmluZU1vZGUoIm51bGwiLCBmdW5jdGlvbigpIHsKLSAgICByZXR1
cm4ge3Rva2VuOiBmdW5jdGlvbihzdHJlYW0pIHtzdHJlYW0uc2tpcFRvRW5kKCk7fX07Ci0gIH0p
OwotICBDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQvcGxhaW4iLCAibnVsbCIpOworICB2YXIg
aGFzQ29weUV2ZW50ID0gKGZ1bmN0aW9uKCkgeworICAgIHZhciBlID0gZWx0KCJkaXYiKTsKKyAg
ICBpZiAoIm9uY29weSIgaW4gZSkgcmV0dXJuIHRydWU7CisgICAgZS5zZXRBdHRyaWJ1dGUoIm9u
Y29weSIsICJyZXR1cm47Iik7CisgICAgcmV0dXJuIHR5cGVvZiBlLm9uY29weSA9PSAnZnVuY3Rp
b24nOworICB9KSgpOworCisgIC8vIEtFWSBOQU1JTkcKIAogICB2YXIga2V5TmFtZXMgPSB7Mzog
IkVudGVyIiwgODogIkJhY2tzcGFjZSIsIDk6ICJUYWIiLCAxMzogIkVudGVyIiwgMTY6ICJTaGlm
dCIsIDE3OiAiQ3RybCIsIDE4OiAiQWx0IiwKICAgICAgICAgICAgICAgICAgIDE5OiAiUGF1c2Ui
LCAyMDogIkNhcHNMb2NrIiwgMjc6ICJFc2MiLCAzMjogIlNwYWNlIiwgMzM6ICJQYWdlVXAiLCAz
NDogIlBhZ2VEb3duIiwgMzU6ICJFbmQiLApAQCAtMzIxNiw1ICs0MTkwLDI2MSBAQCB2YXIgQ29k
ZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICBmb3IgKHZhciBpID0gMTsgaSA8PSAxMjsgaSsr
KSBrZXlOYW1lc1tpICsgMTExXSA9IGtleU5hbWVzW2kgKyA2MzIzNV0gPSAiRiIgKyBpOwogICB9
KSgpOwogCisgIC8vIEJJREkgSEVMUEVSUworCisgIGZ1bmN0aW9uIGl0ZXJhdGVCaWRpU2VjdGlv
bnMob3JkZXIsIGZyb20sIHRvLCBmKSB7CisgICAgaWYgKCFvcmRlcikgcmV0dXJuIGYoZnJvbSwg
dG8sICJsdHIiKTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9yZGVyLmxlbmd0aDsgKytpKSB7
CisgICAgICB2YXIgcGFydCA9IG9yZGVyW2ldOworICAgICAgaWYgKHBhcnQuZnJvbSA8IHRvICYm
IHBhcnQudG8gPiBmcm9tKQorICAgICAgICBmKE1hdGgubWF4KHBhcnQuZnJvbSwgZnJvbSksIE1h
dGgubWluKHBhcnQudG8sIHRvKSwgcGFydC5sZXZlbCA9PSAxID8gInJ0bCIgOiAibHRyIik7Cisg
ICAgfQorICB9CisKKyAgZnVuY3Rpb24gYmlkaUxlZnQocGFydCkgeyByZXR1cm4gcGFydC5sZXZl
bCAlIDIgPyBwYXJ0LnRvIDogcGFydC5mcm9tOyB9CisgIGZ1bmN0aW9uIGJpZGlSaWdodChwYXJ0
KSB7IHJldHVybiBwYXJ0LmxldmVsICUgMiA/IHBhcnQuZnJvbSA6IHBhcnQudG87IH0KKworICBm
dW5jdGlvbiBsaW5lTGVmdChsaW5lKSB7IHZhciBvcmRlciA9IGdldE9yZGVyKGxpbmUpOyByZXR1
cm4gb3JkZXIgPyBiaWRpTGVmdChvcmRlclswXSkgOiAwOyB9CisgIGZ1bmN0aW9uIGxpbmVSaWdo
dChsaW5lKSB7CisgICAgdmFyIG9yZGVyID0gZ2V0T3JkZXIobGluZSk7CisgICAgaWYgKCFvcmRl
cikgcmV0dXJuIGxpbmUudGV4dC5sZW5ndGg7CisgICAgcmV0dXJuIGJpZGlSaWdodChsc3Qob3Jk
ZXIpKTsKKyAgfQorCisgIGZ1bmN0aW9uIGxpbmVTdGFydChjbSwgbGluZU5vKSB7CisgICAgdmFy
IG1lcmdlZCwgbGluZTsKKyAgICB3aGlsZSAobWVyZ2VkID0gY29sbGFwc2VkU3BhbkF0U3RhcnQo
bGluZSA9IGdldExpbmUoY20udmlldy5kb2MsIGxpbmVObykpKQorICAgICAgbGluZU5vID0gbWVy
Z2VkLmZpbmQoKS5mcm9tLmxpbmU7CisgICAgdmFyIG9yZGVyID0gZ2V0T3JkZXIobGluZSk7Cisg
ICAgdmFyIGNoID0gIW9yZGVyID8gMCA6IG9yZGVyWzBdLmxldmVsICUgMiA/IGxpbmVSaWdodChs
aW5lKSA6IGxpbmVMZWZ0KGxpbmUpOworICAgIHJldHVybiB7bGluZTogbGluZU5vLCBjaDogY2h9
OworICB9CisgIGZ1bmN0aW9uIGxpbmVFbmQoY20sIGxpbmVObykgeworICAgIHZhciBtZXJnZWQs
IGxpbmU7CisgICAgd2hpbGUgKG1lcmdlZCA9IGNvbGxhcHNlZFNwYW5BdEVuZChsaW5lID0gZ2V0
TGluZShjbS52aWV3LmRvYywgbGluZU5vKSkpCisgICAgICBsaW5lTm8gPSBtZXJnZWQuZmluZCgp
LnRvLmxpbmU7CisgICAgdmFyIG9yZGVyID0gZ2V0T3JkZXIobGluZSk7CisgICAgdmFyIGNoID0g
IW9yZGVyID8gbGluZS50ZXh0Lmxlbmd0aCA6IG9yZGVyWzBdLmxldmVsICUgMiA/IGxpbmVMZWZ0
KGxpbmUpIDogbGluZVJpZ2h0KGxpbmUpOworICAgIHJldHVybiB7bGluZTogbGluZU5vLCBjaDog
Y2h9OworICB9CisKKyAgLy8gVGhpcyBpcyBzb21ld2hhdCBpbnZvbHZlZC4gSXQgaXMgbmVlZGVk
IGluIG9yZGVyIHRvIG1vdmUKKyAgLy8gJ3Zpc3VhbGx5JyB0aHJvdWdoIGJpLWRpcmVjdGlvbmFs
IHRleHQgLS0gaS5lLiwgcHJlc3NpbmcgbGVmdAorICAvLyBzaG91bGQgbWFrZSB0aGUgY3Vyc29y
IGdvIGxlZnQsIGV2ZW4gd2hlbiBpbiBSVEwgdGV4dC4gVGhlCisgIC8vIHRyaWNreSBwYXJ0IGlz
IHRoZSAnanVtcHMnLCB3aGVyZSBSVEwgYW5kIExUUiB0ZXh0IHRvdWNoIGVhY2gKKyAgLy8gb3Ro
ZXIuIFRoaXMgb2Z0ZW4gcmVxdWlyZXMgdGhlIGN1cnNvciBvZmZzZXQgdG8gbW92ZSBtb3JlIHRo
YW4KKyAgLy8gb25lIHVuaXQsIGluIG9yZGVyIHRvIHZpc3VhbGx5IG1vdmUgb25lIHVuaXQuCisg
IGZ1bmN0aW9uIG1vdmVWaXN1YWxseShsaW5lLCBzdGFydCwgZGlyLCBieVVuaXQpIHsKKyAgICB2
YXIgYmlkaSA9IGdldE9yZGVyKGxpbmUpOworICAgIGlmICghYmlkaSkgcmV0dXJuIG1vdmVMb2dp
Y2FsbHkobGluZSwgc3RhcnQsIGRpciwgYnlVbml0KTsKKyAgICB2YXIgbW92ZU9uZVVuaXQgPSBi
eVVuaXQgPyBmdW5jdGlvbihwb3MsIGRpcikgeworICAgICAgZG8gcG9zICs9IGRpcjsKKyAgICAg
IHdoaWxlIChwb3MgPiAwICYmIGlzRXh0ZW5kaW5nQ2hhci50ZXN0KGxpbmUudGV4dC5jaGFyQXQo
cG9zKSkpOworICAgICAgcmV0dXJuIHBvczsKKyAgICB9IDogZnVuY3Rpb24ocG9zLCBkaXIpIHsg
cmV0dXJuIHBvcyArIGRpcjsgfTsKKyAgICB2YXIgbGluZWRpciA9IGJpZGlbMF0ubGV2ZWw7Cisg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiaWRpLmxlbmd0aDsgKytpKSB7CisgICAgICB2YXIgcGFy
dCA9IGJpZGlbaV0sIHN0aWNreSA9IHBhcnQubGV2ZWwgJSAyID09IGxpbmVkaXI7CisgICAgICBp
ZiAoKHBhcnQuZnJvbSA8IHN0YXJ0ICYmIHBhcnQudG8gPiBzdGFydCkgfHwKKyAgICAgICAgICAo
c3RpY2t5ICYmIChwYXJ0LmZyb20gPT0gc3RhcnQgfHwgcGFydC50byA9PSBzdGFydCkpKSBicmVh
azsKKyAgICB9CisgICAgdmFyIHRhcmdldCA9IG1vdmVPbmVVbml0KHN0YXJ0LCBwYXJ0LmxldmVs
ICUgMiA/IC1kaXIgOiBkaXIpOworCisgICAgd2hpbGUgKHRhcmdldCAhPSBudWxsKSB7CisgICAg
ICBpZiAocGFydC5sZXZlbCAlIDIgPT0gbGluZWRpcikgeworICAgICAgICBpZiAodGFyZ2V0IDwg
cGFydC5mcm9tIHx8IHRhcmdldCA+IHBhcnQudG8pIHsKKyAgICAgICAgICBwYXJ0ID0gYmlkaVtp
ICs9IGRpcl07CisgICAgICAgICAgdGFyZ2V0ID0gcGFydCAmJiAoZGlyID4gMCA9PSBwYXJ0Lmxl
dmVsICUgMiA/IG1vdmVPbmVVbml0KHBhcnQudG8sIC0xKSA6IG1vdmVPbmVVbml0KHBhcnQuZnJv
bSwgMSkpOworICAgICAgICB9IGVsc2UgYnJlYWs7CisgICAgICB9IGVsc2UgeworICAgICAgICBp
ZiAodGFyZ2V0ID09IGJpZGlMZWZ0KHBhcnQpKSB7CisgICAgICAgICAgcGFydCA9IGJpZGlbLS1p
XTsKKyAgICAgICAgICB0YXJnZXQgPSBwYXJ0ICYmIGJpZGlSaWdodChwYXJ0KTsKKyAgICAgICAg
fSBlbHNlIGlmICh0YXJnZXQgPT0gYmlkaVJpZ2h0KHBhcnQpKSB7CisgICAgICAgICAgcGFydCA9
IGJpZGlbKytpXTsKKyAgICAgICAgICB0YXJnZXQgPSBwYXJ0ICYmIGJpZGlMZWZ0KHBhcnQpOwor
ICAgICAgICB9IGVsc2UgYnJlYWs7CisgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRhcmdl
dCA8IDAgfHwgdGFyZ2V0ID4gbGluZS50ZXh0Lmxlbmd0aCA/IG51bGwgOiB0YXJnZXQ7CisgIH0K
KworICBmdW5jdGlvbiBtb3ZlTG9naWNhbGx5KGxpbmUsIHN0YXJ0LCBkaXIsIGJ5VW5pdCkgewor
ICAgIHZhciB0YXJnZXQgPSBzdGFydCArIGRpcjsKKyAgICBpZiAoYnlVbml0KSB3aGlsZSAodGFy
Z2V0ID4gMCAmJiBpc0V4dGVuZGluZ0NoYXIudGVzdChsaW5lLnRleHQuY2hhckF0KHRhcmdldCkp
KSB0YXJnZXQgKz0gZGlyOworICAgIHJldHVybiB0YXJnZXQgPCAwIHx8IHRhcmdldCA+IGxpbmUu
dGV4dC5sZW5ndGggPyBudWxsIDogdGFyZ2V0OworICB9CisKKyAgLy8gQmlkaXJlY3Rpb25hbCBv
cmRlcmluZyBhbGdvcml0aG0KKyAgLy8gU2VlIGh0dHA6Ly91bmljb2RlLm9yZy9yZXBvcnRzL3Ry
OS90cjktMTMuaHRtbCBmb3IgdGhlIGFsZ29yaXRobQorICAvLyB0aGF0IHRoaXMgKHBhcnRpYWxs
eSkgaW1wbGVtZW50cy4KKworICAvLyBPbmUtY2hhciBjb2RlcyB1c2VkIGZvciBjaGFyYWN0ZXIg
dHlwZXM6CisgIC8vIEwgKEwpOiAgIExlZnQtdG8tUmlnaHQKKyAgLy8gUiAoUik6ICAgUmlnaHQt
dG8tTGVmdAorICAvLyByIChBTCk6ICBSaWdodC10by1MZWZ0IEFyYWJpYworICAvLyAxIChFTik6
ICBFdXJvcGVhbiBOdW1iZXIKKyAgLy8gKyAoRVMpOiAgRXVyb3BlYW4gTnVtYmVyIFNlcGFyYXRv
cgorICAvLyAlIChFVCk6ICBFdXJvcGVhbiBOdW1iZXIgVGVybWluYXRvcgorICAvLyBuIChBTik6
ICBBcmFiaWMgTnVtYmVyCisgIC8vICwgKENTKTogIENvbW1vbiBOdW1iZXIgU2VwYXJhdG9yCisg
IC8vIG0gKE5TTSk6IE5vbi1TcGFjaW5nIE1hcmsKKyAgLy8gYiAoQk4pOiAgQm91bmRhcnkgTmV1
dHJhbAorICAvLyBzIChCKTogICBQYXJhZ3JhcGggU2VwYXJhdG9yCisgIC8vIHQgKFMpOiAgIFNl
Z21lbnQgU2VwYXJhdG9yCisgIC8vIHcgKFdTKTogIFdoaXRlc3BhY2UKKyAgLy8gTiAoT04pOiAg
T3RoZXIgTmV1dHJhbHMKKworICAvLyBSZXR1cm5zIG51bGwgaWYgY2hhcmFjdGVycyBhcmUgb3Jk
ZXJlZCBhcyB0aGV5IGFwcGVhcgorICAvLyAobGVmdC10by1yaWdodCksIG9yIGFuIGFycmF5IG9m
IHNlY3Rpb25zICh7ZnJvbSwgdG8sIGxldmVsfQorICAvLyBvYmplY3RzKSBpbiB0aGUgb3JkZXIg
aW4gd2hpY2ggdGhleSBvY2N1ciB2aXN1YWxseS4KKyAgdmFyIGJpZGlPcmRlcmluZyA9IChmdW5j
dGlvbigpIHsKKyAgICAvLyBDaGFyYWN0ZXIgdHlwZXMgZm9yIGNvZGVwb2ludHMgMCB0byAweGZm
CisgICAgdmFyIGxvd1R5cGVzID0gImJiYmJiYmJiYnRzdHdzYmJiYmJiYmJiYmJiYmJzc3N0d05O
JSUlTk5OTk5OLE4sTjExMTExMTExMTFOTk5OTk5OTExMTExMTExMTExMTExMTExMTExMTExMTExO
Tk5OTk5MTExMTExMTExMTExMTExMTExMTExMTExMTE5OTk5iYmJiYmJzYmJiYmJiYmJiYmJiYmJi
YmJiYmJiYmJiYmIsTiUlJSVOTk5OTE5OTk5OJSUxMU5MTk5OMUxOTk5OTkxMTExMTExMTExMTExM
TExMTExMTExMTkxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExOTExMTExMTEwiOworICAg
IC8vIENoYXJhY3RlciB0eXBlcyBmb3IgY29kZXBvaW50cyAweDYwMCB0byAweDZmZgorICAgIHZh
ciBhcmFiaWNUeXBlcyA9ICJycnJycnJycnJycnIsck5ObW1tbW1tcnJycnJycnJycnJycnJycnJy
cnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJtbW1tbW1tbW1tbW1tbXJycnJycnJu
bm5ubm5ubm5uJW5ucnJybXJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJy
cnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJy
cnJybW1tbW1tbW1tbW1tbW1tbW1tbU5tbW1tcnJycnJycnJycnJycnJycnJyIjsKKyAgICBmdW5j
dGlvbiBjaGFyVHlwZShjb2RlKSB7CisgICAgICB2YXIgdHlwZSA9ICJMIjsKKyAgICAgIGlmIChj
b2RlIDw9IDB4ZmYpIHJldHVybiBsb3dUeXBlcy5jaGFyQXQoY29kZSk7CisgICAgICBlbHNlIGlm
ICgweDU5MCA8PSBjb2RlICYmIGNvZGUgPD0gMHg1ZjQpIHJldHVybiAiUiI7CisgICAgICBlbHNl
IGlmICgweDYwMCA8PSBjb2RlICYmIGNvZGUgPD0gMHg2ZmYpIHJldHVybiBhcmFiaWNUeXBlcy5j
aGFyQXQoY29kZSAtIDB4NjAwKTsKKyAgICAgIGVsc2UgaWYgKDB4NzAwIDw9IGNvZGUgJiYgY29k
ZSA8PSAweDhhYykgcmV0dXJuICJyIjsKKyAgICAgIGVsc2UgcmV0dXJuICJMIjsKKyAgICB9CisK
KyAgICB2YXIgYmlkaVJFID0gL1tcdTA1OTAtXHUwNWY0XHUwNjAwLVx1MDZmZlx1MDcwMC1cdTA4
YWNdLzsKKyAgICB2YXIgaXNOZXV0cmFsID0gL1tzdHdOXS8sIGlzU3Ryb25nID0gL1tMUnJdLywg
Y291bnRzQXNMZWZ0ID0gL1tMYjFuXS8sIGNvdW50c0FzTnVtID0gL1sxbl0vOworCisgICAgcmV0
dXJuIGZ1bmN0aW9uIGNoYXJPcmRlcmluZyhzdHIpIHsKKyAgICAgIGlmICghYmlkaVJFLnRlc3Qo
c3RyKSkgcmV0dXJuIGZhbHNlOworICAgICAgdmFyIGxlbiA9IHN0ci5sZW5ndGgsIHR5cGVzID0g
W10sIHN0YXJ0VHlwZSA9IG51bGw7CisgICAgICBmb3IgKHZhciBpID0gMCwgdHlwZTsgaSA8IGxl
bjsgKytpKSB7CisgICAgICAgIHR5cGVzLnB1c2godHlwZSA9IGNoYXJUeXBlKHN0ci5jaGFyQ29k
ZUF0KGkpKSk7CisgICAgICAgIGlmIChzdGFydFR5cGUgPT0gbnVsbCkgeworICAgICAgICAgIGlm
ICh0eXBlID09ICJMIikgc3RhcnRUeXBlID0gIkwiOworICAgICAgICAgIGVsc2UgaWYgKHR5cGUg
PT0gIlIiIHx8IHR5cGUgPT0gInIiKSBzdGFydFR5cGUgPSAiUiI7CisgICAgICAgIH0KKyAgICAg
IH0KKyAgICAgIGlmIChzdGFydFR5cGUgPT0gbnVsbCkgc3RhcnRUeXBlID0gIkwiOworCisgICAg
ICAvLyBXMS4gRXhhbWluZSBlYWNoIG5vbi1zcGFjaW5nIG1hcmsgKE5TTSkgaW4gdGhlIGxldmVs
IHJ1biwgYW5kCisgICAgICAvLyBjaGFuZ2UgdGhlIHR5cGUgb2YgdGhlIE5TTSB0byB0aGUgdHlw
ZSBvZiB0aGUgcHJldmlvdXMKKyAgICAgIC8vIGNoYXJhY3Rlci4gSWYgdGhlIE5TTSBpcyBhdCB0
aGUgc3RhcnQgb2YgdGhlIGxldmVsIHJ1biwgaXQgd2lsbAorICAgICAgLy8gZ2V0IHRoZSB0eXBl
IG9mIHNvci4KKyAgICAgIGZvciAodmFyIGkgPSAwLCBwcmV2ID0gc3RhcnRUeXBlOyBpIDwgbGVu
OyArK2kpIHsKKyAgICAgICAgdmFyIHR5cGUgPSB0eXBlc1tpXTsKKyAgICAgICAgaWYgKHR5cGUg
PT0gIm0iKSB0eXBlc1tpXSA9IHByZXY7CisgICAgICAgIGVsc2UgcHJldiA9IHR5cGU7CisgICAg
ICB9CisKKyAgICAgIC8vIFcyLiBTZWFyY2ggYmFja3dhcmRzIGZyb20gZWFjaCBpbnN0YW5jZSBv
ZiBhIEV1cm9wZWFuIG51bWJlcgorICAgICAgLy8gdW50aWwgdGhlIGZpcnN0IHN0cm9uZyB0eXBl
IChSLCBMLCBBTCwgb3Igc29yKSBpcyBmb3VuZC4gSWYgYW4KKyAgICAgIC8vIEFMIGlzIGZvdW5k
LCBjaGFuZ2UgdGhlIHR5cGUgb2YgdGhlIEV1cm9wZWFuIG51bWJlciB0byBBcmFiaWMKKyAgICAg
IC8vIG51bWJlci4KKyAgICAgIC8vIFczLiBDaGFuZ2UgYWxsIEFMcyB0byBSLgorICAgICAgZm9y
ICh2YXIgaSA9IDAsIGN1ciA9IHN0YXJ0VHlwZTsgaSA8IGxlbjsgKytpKSB7CisgICAgICAgIHZh
ciB0eXBlID0gdHlwZXNbaV07CisgICAgICAgIGlmICh0eXBlID09ICIxIiAmJiBjdXIgPT0gInIi
KSB0eXBlc1tpXSA9ICJuIjsKKyAgICAgICAgZWxzZSBpZiAoaXNTdHJvbmcudGVzdCh0eXBlKSkg
eyBjdXIgPSB0eXBlOyBpZiAodHlwZSA9PSAiciIpIHR5cGVzW2ldID0gIlIiOyB9CisgICAgICB9
CisKKyAgICAgIC8vIFc0LiBBIHNpbmdsZSBFdXJvcGVhbiBzZXBhcmF0b3IgYmV0d2VlbiB0d28g
RXVyb3BlYW4gbnVtYmVycworICAgICAgLy8gY2hhbmdlcyB0byBhIEV1cm9wZWFuIG51bWJlci4g
QSBzaW5nbGUgY29tbW9uIHNlcGFyYXRvciBiZXR3ZWVuCisgICAgICAvLyB0d28gbnVtYmVycyBv
ZiB0aGUgc2FtZSB0eXBlIGNoYW5nZXMgdG8gdGhhdCB0eXBlLgorICAgICAgZm9yICh2YXIgaSA9
IDEsIHByZXYgPSB0eXBlc1swXTsgaSA8IGxlbiAtIDE7ICsraSkgeworICAgICAgICB2YXIgdHlw
ZSA9IHR5cGVzW2ldOworICAgICAgICBpZiAodHlwZSA9PSAiKyIgJiYgcHJldiA9PSAiMSIgJiYg
dHlwZXNbaSsxXSA9PSAiMSIpIHR5cGVzW2ldID0gIjEiOworICAgICAgICBlbHNlIGlmICh0eXBl
ID09ICIsIiAmJiBwcmV2ID09IHR5cGVzW2krMV0gJiYKKyAgICAgICAgICAgICAgICAgKHByZXYg
PT0gIjEiIHx8IHByZXYgPT0gIm4iKSkgdHlwZXNbaV0gPSBwcmV2OworICAgICAgICBwcmV2ID0g
dHlwZTsKKyAgICAgIH0KKworICAgICAgLy8gVzUuIEEgc2VxdWVuY2Ugb2YgRXVyb3BlYW4gdGVy
bWluYXRvcnMgYWRqYWNlbnQgdG8gRXVyb3BlYW4KKyAgICAgIC8vIG51bWJlcnMgY2hhbmdlcyB0
byBhbGwgRXVyb3BlYW4gbnVtYmVycy4KKyAgICAgIC8vIFc2LiBPdGhlcndpc2UsIHNlcGFyYXRv
cnMgYW5kIHRlcm1pbmF0b3JzIGNoYW5nZSB0byBPdGhlcgorICAgICAgLy8gTmV1dHJhbC4KKyAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKKyAgICAgICAgdmFyIHR5cGUgPSB0
eXBlc1tpXTsKKyAgICAgICAgaWYgKHR5cGUgPT0gIiwiKSB0eXBlc1tpXSA9ICJOIjsKKyAgICAg
ICAgZWxzZSBpZiAodHlwZSA9PSAiJSIpIHsKKyAgICAgICAgICBmb3IgKHZhciBlbmQgPSBpICsg
MTsgZW5kIDwgbGVuICYmIHR5cGVzW2VuZF0gPT0gIiUiOyArK2VuZCkge30KKyAgICAgICAgICB2
YXIgcmVwbGFjZSA9IChpICYmIHR5cGVzW2ktMV0gPT0gIiEiKSB8fCAoZW5kIDwgbGVuIC0gMSAm
JiB0eXBlc1tlbmRdID09ICIxIikgPyAiMSIgOiAiTiI7CisgICAgICAgICAgZm9yICh2YXIgaiA9
IGk7IGogPCBlbmQ7ICsraikgdHlwZXNbal0gPSByZXBsYWNlOworICAgICAgICAgIGkgPSBlbmQg
LSAxOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIC8vIFc3LiBTZWFyY2ggYmFja3dhcmRz
IGZyb20gZWFjaCBpbnN0YW5jZSBvZiBhIEV1cm9wZWFuIG51bWJlcgorICAgICAgLy8gdW50aWwg
dGhlIGZpcnN0IHN0cm9uZyB0eXBlIChSLCBMLCBvciBzb3IpIGlzIGZvdW5kLiBJZiBhbiBMIGlz
CisgICAgICAvLyBmb3VuZCwgdGhlbiBjaGFuZ2UgdGhlIHR5cGUgb2YgdGhlIEV1cm9wZWFuIG51
bWJlciB0byBMLgorICAgICAgZm9yICh2YXIgaSA9IDAsIGN1ciA9IHN0YXJ0VHlwZTsgaSA8IGxl
bjsgKytpKSB7CisgICAgICAgIHZhciB0eXBlID0gdHlwZXNbaV07CisgICAgICAgIGlmIChjdXIg
PT0gIkwiICYmIHR5cGUgPT0gIjEiKSB0eXBlc1tpXSA9ICJMIjsKKyAgICAgICAgZWxzZSBpZiAo
aXNTdHJvbmcudGVzdCh0eXBlKSkgY3VyID0gdHlwZTsKKyAgICAgIH0KKworICAgICAgLy8gTjEu
IEEgc2VxdWVuY2Ugb2YgbmV1dHJhbHMgdGFrZXMgdGhlIGRpcmVjdGlvbiBvZiB0aGUKKyAgICAg
IC8vIHN1cnJvdW5kaW5nIHN0cm9uZyB0ZXh0IGlmIHRoZSB0ZXh0IG9uIGJvdGggc2lkZXMgaGFz
IHRoZSBzYW1lCisgICAgICAvLyBkaXJlY3Rpb24uIEV1cm9wZWFuIGFuZCBBcmFiaWMgbnVtYmVy
cyBhY3QgYXMgaWYgdGhleSB3ZXJlIFIgaW4KKyAgICAgIC8vIHRlcm1zIG9mIHRoZWlyIGluZmx1
ZW5jZSBvbiBuZXV0cmFscy4gU3RhcnQtb2YtbGV2ZWwtcnVuIChzb3IpCisgICAgICAvLyBhbmQg
ZW5kLW9mLWxldmVsLXJ1biAoZW9yKSBhcmUgdXNlZCBhdCBsZXZlbCBydW4gYm91bmRhcmllcy4K
KyAgICAgIC8vIE4yLiBBbnkgcmVtYWluaW5nIG5ldXRyYWxzIHRha2UgdGhlIGVtYmVkZGluZyBk
aXJlY3Rpb24uCisgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7CisgICAgICAg
IGlmIChpc05ldXRyYWwudGVzdCh0eXBlc1tpXSkpIHsKKyAgICAgICAgICBmb3IgKHZhciBlbmQg
PSBpICsgMTsgZW5kIDwgbGVuICYmIGlzTmV1dHJhbC50ZXN0KHR5cGVzW2VuZF0pOyArK2VuZCkg
e30KKyAgICAgICAgICB2YXIgYmVmb3JlID0gKGkgPyB0eXBlc1tpLTFdIDogc3RhcnRUeXBlKSA9
PSAiTCI7CisgICAgICAgICAgdmFyIGFmdGVyID0gKGVuZCA8IGxlbiAtIDEgPyB0eXBlc1tlbmRd
IDogc3RhcnRUeXBlKSA9PSAiTCI7CisgICAgICAgICAgdmFyIHJlcGxhY2UgPSBiZWZvcmUgfHwg
YWZ0ZXIgPyAiTCIgOiAiUiI7CisgICAgICAgICAgZm9yICh2YXIgaiA9IGk7IGogPCBlbmQ7ICsr
aikgdHlwZXNbal0gPSByZXBsYWNlOworICAgICAgICAgIGkgPSBlbmQgLSAxOworICAgICAgICB9
CisgICAgICB9CisKKyAgICAgIC8vIEhlcmUgd2UgZGVwYXJ0IGZyb20gdGhlIGRvY3VtZW50ZWQg
YWxnb3JpdGhtLCBpbiBvcmRlciB0byBhdm9pZAorICAgICAgLy8gYnVpbGRpbmcgdXAgYW4gYWN0
dWFsIGxldmVscyBhcnJheS4gU2luY2UgdGhlcmUgYXJlIG9ubHkgdGhyZWUKKyAgICAgIC8vIGxl
dmVscyAoMCwgMSwgMikgaW4gYW4gaW1wbGVtZW50YXRpb24gdGhhdCBkb2Vzbid0IHRha2UKKyAg
ICAgIC8vIGV4cGxpY2l0IGVtYmVkZGluZyBpbnRvIGFjY291bnQsIHdlIGNhbiBidWlsZCB1cCB0
aGUgb3JkZXIgb24KKyAgICAgIC8vIHRoZSBmbHksIHdpdGhvdXQgZm9sbG93aW5nIHRoZSBsZXZl
bC1iYXNlZCBhbGdvcml0aG0uCisgICAgICB2YXIgb3JkZXIgPSBbXSwgbTsKKyAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgbGVuOykgeworICAgICAgICBpZiAoY291bnRzQXNMZWZ0LnRlc3QodHlw
ZXNbaV0pKSB7CisgICAgICAgICAgdmFyIHN0YXJ0ID0gaTsKKyAgICAgICAgICBmb3IgKCsraTsg
aSA8IGxlbiAmJiBjb3VudHNBc0xlZnQudGVzdCh0eXBlc1tpXSk7ICsraSkge30KKyAgICAgICAg
ICBvcmRlci5wdXNoKHtmcm9tOiBzdGFydCwgdG86IGksIGxldmVsOiAwfSk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgdmFyIHBvcyA9IGksIGF0ID0gb3JkZXIubGVuZ3RoOworICAgICAg
ICAgIGZvciAoKytpOyBpIDwgbGVuICYmIHR5cGVzW2ldICE9ICJMIjsgKytpKSB7fQorICAgICAg
ICAgIGZvciAodmFyIGogPSBwb3M7IGogPCBpOykgeworICAgICAgICAgICAgaWYgKGNvdW50c0Fz
TnVtLnRlc3QodHlwZXNbal0pKSB7CisgICAgICAgICAgICAgIGlmIChwb3MgPCBqKSBvcmRlci5z
cGxpY2UoYXQsIDAsIHtmcm9tOiBwb3MsIHRvOiBqLCBsZXZlbDogMX0pOworICAgICAgICAgICAg
ICB2YXIgbnN0YXJ0ID0gajsKKyAgICAgICAgICAgICAgZm9yICgrK2o7IGogPCBpICYmIGNvdW50
c0FzTnVtLnRlc3QodHlwZXNbal0pOyArK2opIHt9CisgICAgICAgICAgICAgIG9yZGVyLnNwbGlj
ZShhdCwgMCwge2Zyb206IG5zdGFydCwgdG86IGosIGxldmVsOiAyfSk7CisgICAgICAgICAgICAg
IHBvcyA9IGo7CisgICAgICAgICAgICB9IGVsc2UgKytqOworICAgICAgICAgIH0KKyAgICAgICAg
ICBpZiAocG9zIDwgaSkgb3JkZXIuc3BsaWNlKGF0LCAwLCB7ZnJvbTogcG9zLCB0bzogaSwgbGV2
ZWw6IDF9KTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgaWYgKG9yZGVyWzBdLmxldmVsID09
IDEgJiYgKG0gPSBzdHIubWF0Y2goL15ccysvKSkpIHsKKyAgICAgICAgb3JkZXJbMF0uZnJvbSA9
IG1bMF0ubGVuZ3RoOworICAgICAgICBvcmRlci51bnNoaWZ0KHtmcm9tOiAwLCB0bzogbVswXS5s
ZW5ndGgsIGxldmVsOiAwfSk7CisgICAgICB9CisgICAgICBpZiAobHN0KG9yZGVyKS5sZXZlbCA9
PSAxICYmIChtID0gc3RyLm1hdGNoKC9ccyskLykpKSB7CisgICAgICAgIGxzdChvcmRlcikudG8g
LT0gbVswXS5sZW5ndGg7CisgICAgICAgIG9yZGVyLnB1c2goe2Zyb206IGxlbiAtIG1bMF0ubGVu
Z3RoLCB0bzogbGVuLCBsZXZlbDogMH0pOworICAgICAgfQorICAgICAgaWYgKG9yZGVyWzBdLmxl
dmVsICE9IGxzdChvcmRlcikubGV2ZWwpCisgICAgICAgIG9yZGVyLnB1c2goe2Zyb206IGxlbiwg
dG86IGxlbiwgbGV2ZWw6IG9yZGVyWzBdLmxldmVsfSk7CisKKyAgICAgIHJldHVybiBvcmRlcjsK
KyAgICB9OworICB9KSgpOworCisgIC8vIFRIRSBFTkQKKworICBDb2RlTWlycm9yLnZlcnNpb24g
PSAiMy4wIEIyIjsKKwogICByZXR1cm4gQ29kZU1pcnJvcjsKIH0pKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>173038</attachid>
            <date>2012-11-08 07:09:44 -0800</date>
            <delta_ts>2012-11-08 07:39:33 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-99319-20121108230754.patch</filename>
            <type>text/plain</type>
            <size>2618</size>
            <attacher name="Jan Keromnes">janx</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMzODk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjBjYzFlZWJiN2U3YTRi
NmY2NjJlNWJiZGUxYTVkYmYzNDEzNGRjOC4uN2E2Yjk4NDFkYTVjMDMxMmE5MGMxYzY1YTliNjQ1
M2Q2NGE2MTMwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDEyLTExLTA4ICBKYW4g
S2Vyb21uZXMgIDxqYW54QGxpbnV4LmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBVcGRh
dGUgQ29kZU1pcnJvciB0byB2MworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9OTkzMTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBUEkgY2hhbmdlcyBjb21wbGV0aW5nIG1pZ3JhdGlvbiB0byB2My4KKworICAg
ICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvQ29kZU1pcnJvclRleHRFZGl0b3IuanM6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRleHRFZGl0b3IpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkNvZGVNaXJyb3JUZXh0RWRpdG9yLnByb3RvdHlwZS5yZXZlYWxMaW5lKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVGV4dEVkaXRvci5wcm90b3R5cGUuc2VsZWN0aW9u
KToKKwogMjAxMi0xMS0wOCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5j
b20+CiAKICAgICAgICAgW0dUS10gQ2xlYW4gdXAgaW5jbHVkZXMgaW4gR09iamVjdCBET00gYmlu
ZGluZ3MgY29kZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9Db2RlTWlycm9yVGV4dEVkaXRvci5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvQ29kZU1pcnJvclRleHRFZGl0b3IuanMKaW5kZXggN2FmMzA0Njc5YmM0MDdmOWU5MDI2
MDg4MjAxM2RkYWE4MTVhMDBkNS4uZmY2MWJkYmYwNDc0MzkxN2M3NzA1ODgzMDQ5NDI2ZjNmNmRk
OTFhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db2Rl
TWlycm9yVGV4dEVkaXRvci5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL0NvZGVNaXJyb3JUZXh0RWRpdG9yLmpzCkBAIC01NCw4ICs1NCw5IEBAIFdlYkluc3BlY3Rv
ci5Db2RlTWlycm9yVGV4dEVkaXRvciA9IGZ1bmN0aW9uKHVybCwgZGVsZWdhdGUpCiAgICAgICAg
IGxpbmVOdW1iZXJzOiB0cnVlLAogICAgICAgICBndXR0ZXJzOiBbIkNvZGVNaXJyb3ItbGluZW51
bWJlcnMiLCAiYnJlYWtwb2ludHMiXQogICAgIH0pOwotICAgIENvZGVNaXJyb3Iub24odGhpcy5f
Y29kZU1pcnJvciwgImNoYW5nZSIsIHRoaXMuX2NoYW5nZS5iaW5kKHRoaXMpKTsKLSAgICBDb2Rl
TWlycm9yLm9uKHRoaXMuX2NvZGVNaXJyb3IsICJndXR0ZXJDbGljayIsIHRoaXMuX2d1dHRlckNs
aWNrLmJpbmQodGhpcykpOworCisgICAgdGhpcy5fY29kZU1pcnJvci5vbigiY2hhbmdlIiwgdGhp
cy5fY2hhbmdlLmJpbmQodGhpcykpOworICAgIHRoaXMuX2NvZGVNaXJyb3Iub24oImd1dHRlckNs
aWNrIiwgdGhpcy5fZ3V0dGVyQ2xpY2suYmluZCh0aGlzKSk7CiAKICAgICB0aGlzLl9sYXN0UmFu
Z2UgPSB0aGlzLnJhbmdlKCk7CiAKQEAgLTExNyw4ICsxMTgsNyBAQCBXZWJJbnNwZWN0b3IuQ29k
ZU1pcnJvclRleHRFZGl0b3IucHJvdG90eXBlID0gewogICAgIHJldmVhbExpbmU6IGZ1bmN0aW9u
KGxpbmVOdW1iZXIpCiAgICAgewogICAgICAgICB0aGlzLl9jb2RlTWlycm9yLnNldEN1cnNvcih7
IGxpbmU6IGxpbmVOdW1iZXIsIGNoOiAwIH0pOwotICAgICAgICB2YXIgY29vcmRzID0gdGhpcy5f
Y29kZU1pcnJvci5jdXJzb3JDb29yZHMoKTsKLSAgICAgICAgdGhpcy5fY29kZU1pcnJvci5zY3Jv
bGxUbyhjb29yZHMueCwgY29vcmRzLnkpOworICAgICAgICB0aGlzLl9jb2RlTWlycm9yLnNjcm9s
bEludG9WaWV3KCk7CiAgICAgfSwKIAogICAgIF9ndXR0ZXJDbGljazogZnVuY3Rpb24oaW5zdGFu
Y2UsIGxpbmVOdW1iZXIsIGd1dHRlciwgZXZlbnQpCkBAIC0yNzYsOCArMjc2LDggQEAgV2ViSW5z
cGVjdG9yLkNvZGVNaXJyb3JUZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsKICAgICAgKi8KICAgICBz
ZWxlY3Rpb246IGZ1bmN0aW9uKHRleHRSYW5nZSkKICAgICB7Ci0gICAgICAgIHZhciBzdGFydCA9
IHRoaXMuX2NvZGVNaXJyb3IuY3Vyc29yQ29vcmRzKHRydWUpOwotICAgICAgICB2YXIgZW5kID0g
dGhpcy5fY29kZU1pcnJvci5jdXJzb3JDb29yZHMoZmFsc2UpOworICAgICAgICB2YXIgc3RhcnQg
PSB0aGlzLl9jb2RlTWlycm9yLmdldEN1cnNvcih0cnVlKTsKKyAgICAgICAgdmFyIGVuZCA9IHRo
aXMuX2NvZGVNaXJyb3IuZ2V0Q3Vyc29yKGZhbHNlKTsKIAogICAgICAgICBpZiAoc3RhcnQubGlu
ZSA+IGVuZC5saW5lIHx8IChzdGFydC5saW5lID09IGVuZC5saW5lICYmIHN0YXJ0LmNoID4gZW5k
LmNoKSkKICAgICAgICAgICAgIHJldHVybiB0aGlzLl90b1JhbmdlKGVuZCwgc3RhcnQpOwo=
</data>
<flag name="review"
          id="187583"
          type_id="1"
          status="-"
          setter="pfeldman"
    />
          </attachment>
      

    </bug>

</bugzilla>